MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Có cách nào để chiếu loại trường không

Có một số vấn đề khiến điều này không thực tế:

  1. Vì truy vấn là một tham số phân biệt với khả năng thực hiện phép chiếu, điều này không thể thực hiện được chỉ từ một truy vấn duy nhất, vì phép chiếu không thể bị ảnh hưởng bởi kết quả của truy vấn
  2. Vì không có cách nào với khung tổng hợp để lặp lại các trường và loại kiểm tra, đó cũng không phải là một tùy chọn

Điều đó đang được nói, có một cách hơi kỳ lạ khi sử dụng Map-Reduce sẽ nhận được các câu trả lời tương tự, mặc dù trong đầu ra kiểu Map-Reduce không tuyệt vời:

map = function() {
    function isNumber(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    }

    var numerics = [];
    for(var fn in this) {
        if (isNumber(this[fn])) {
            numerics.push({f: fn, v: this[fn]});
        }
        if (Array.isArray(this[fn])) {
            // example ... more complex logic needed
            if(isNumber(this[fn][0])) {
                numerics.push({f: fn, v: this[fn]});
            }
        }
    }
    emit(this._id, { n: numerics });
};

reduce = function(key, values) {
  return values;  
};

Nó không hoàn chỉnh, nhưng kết quả tương tự như những gì bạn muốn:

"_id" : ObjectId("52fac254f40ff600c10e56d4"),
 "value" : {
         "n" : [
                 {
                         "f" : "list",
                         "v" : [
                                 1,
                                 2,
                                 3,
                                 4,
                                 5
                         ]
                 },
                 {
                         "f" : "views",
                         "v" : 5
                 }
         ]
 }

Bản đồ chỉ xem xét từng thuộc tính và quyết định xem nó có giống như một số hay không ... và nếu có, hãy thêm vào một mảng sẽ được lưu trữ dưới dạng một đối tượng để công cụ giảm bản đồ không bị nghẹt đầu ra của mảng. Tôi đã giữ nó đơn giản trong mã ví dụ - bạn có thể cải thiện logic của việc kiểm tra số và mảng chắc chắn. :)

Tất nhiên, nó không trực tiếp giống như một find hoặc tổng hợp, nhưng vì MongoDB không được thiết kế với mục đích này, nên điều này có thể phải thực hiện nếu bạn thực sự muốn chức năng này.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mùa xuân - mongodb - tổng hợp - Tùy chọn 'con trỏ' là bắt buộc

  2. MongoDB Java:Tìm kiếm các đối tượng trong Mongo bằng toán tử QueryBuilder $ in không trả về kết quả nào

  3. MongooseError - Hoạt động `users.findOne ()` đệm hết thời gian chờ sau 10000ms

  4. Bluemix Mongodb:Không xác thực được

  5. Mongoose - xác thực cú pháp email