MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как мога да използвам cursor.forEach() в MongoDB, използвайки Node.js?

Отговорът зависи от драйвера, който използвате. Всички драйвери на MongoDB, които познавам, имат cursor.forEach() приложени по един или друг начин.

Ето няколко примера:

node-mongodb-native

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

монгоджи

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

монах

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

мангуст

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

Актуализиране на документи вътре в .forEach обратно повикване

Единственият проблем с актуализирането на документи вътре в .forEach обратното повикване е, че нямате представа кога всички документи са актуализирани.

За да разрешите този проблем, трябва да използвате някакво решение за асинхронен контролен поток. Ето някои опции:

  • асинхронно
  • обещания (when.js, bluebird)

Ето пример за използване на async , използвайки неговата queue функция:

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. MongoDB $min Оператор на конвейер за агрегиране

  2. импортиране на JSON в mongoDB с помощта на pymongo

  3. mgo - производителността на заявката изглежда постоянно бавна (500-650ms)

  4. Интегриране на ClusterControl със SNMP:Част втора

  5. Как да използвам mongodb с електрон?