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

Làm cách nào để sử dụng cursor.forEach () trong MongoDB bằng Node.js?

Câu trả lời phụ thuộc vào trình điều khiển bạn đang sử dụng. Tất cả các trình điều khiển MongoDB mà tôi biết đều có cursor.forEach() được thực hiện theo cách này hay cách khác.

Dưới đây là một số ví dụ:

node-mongodb-native

collection.find(query).forEach(function(doc) {
  // handle
}, function(err) {
  // done or error
});

mongojs

db.collection.find(query).forEach(function(err, doc) {
  // handle
});

nhà sư

collection.find(query, { stream: true })
  .each(function(doc){
    // handle doc
  })
  .error(function(err){
    // handle error
  })
  .success(function(){
    // final callback
  });

cầy mangut

collection.find(query).stream()
  .on('data', function(doc){
    // handle doc
  })
  .on('error', function(err){
    // handle error
  })
  .on('end', function(){
    // final callback
  });

Cập nhật tài liệu bên trong .forEach gọi lại

Sự cố duy nhất khi cập nhật tài liệu bên trong .forEach gọi lại là bạn không biết khi nào tất cả các tài liệu được cập nhật.

Để giải quyết vấn đề này, bạn nên sử dụng một số giải pháp dòng điều khiển không đồng bộ. Dưới đây là một số tùy chọn:

  • không đồng bộ
  • lời hứa (when.js, bluebird)

Đây là một ví dụ về việc sử dụng async , sử dụng queue của nó tính năng:

var q = async.queue(function (doc, callback) {
  // code for your update
  collection.update({
    _id: doc._id
  }, {
    $set: {hi: 'there'}
  }, {
    w: 1
  }, callback);
}, Infinity);

var cursor = collection.find(query);
cursor.each(function(err, doc) {
  if (err) throw err;
  if (doc) q.push(doc); // dispatching doc to async.queue
});

q.drain = function() {
  if (cursor.isClosed()) {
    console.log('all items have been processed');
    db.close();
  }
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. hiển thị dbs cho biết lỗi lệnh Không được phép thực thi

  2. Ứng dụng Meteor - đặt lại DB của ứng dụng đã triển khai

  3. Sắp xếp Mongodb với cách phân biệt chữ hoa chữ thường

  4. Dịch vụ Mongodb sẽ không bắt đầu

  5. Tối ưu hóa môi trường Linux của bạn cho MongoDB