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

Đếm hiệu quả tỷ lệ phần trăm xuất hiện trong MongoDB

Đây là MapReduce đơn giản điều đó sẽ làm những gì bạn muốn:

map = function() {
    for (var key in this.values){
        emit(key, {count:1, trues: (this.values[key] ? 1 : 0)});
    }
}

reduce = function(key, values){
    var out = values[0];
    for (var i=1; i < values.length; i++){
        out.count += values[i].count;
        out.trues += values[i].trues;
    }
    return out;
}

finalize = function(key, value){
    value.ratio = value.trues / value.count;
    return value;
}

db.runCommand({mapReduce:'collection',
               map:map,
               reduce:reduce,
               finalize:finalize,
               out:'counts'
               })

db.counts.findOne({_id:'alpha'})
{_id: 'alpha', value: {count: 100, trues: 52, ratio: 0.52}}

Bạn cũng có thể thực hiện nâng cấp như thế này khi bạn chèn vào bộ sưu tập chính của mình, bộ sưu tập này sẽ cung cấp cho bạn chế độ xem theo thời gian thực vào dữ liệu của bạn:

for (var key in this.values){
    db.counts.update({_id:key},
                     {$inc:{count:1, trues: (this.values[key] ? 1 : 0)}},
                     true);
}

Trên thực tế, bạn thậm chí có thể kết hợp các phương pháp này. Thực hiện công việc hàng loạt MapReduce một lần để điền vào bộ sưu tập số lượng và sau đó sử dụng các cảnh báo để giữ cho nó được cập nhật.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB tìm và xóa - cách nhanh nhất

  2. SQLite trên Android và MongoDB với đồng bộ hóa

  3. Máy chủ phân tích cú pháp - Không tìm thấy tệp

  4. Khóa không được chứa. lỗi trong pymongo

  5. ListCollections với tự động thu thập