sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik een cursor.forEach() in MongoDB gebruiken met Node.js?

Het antwoord hangt af van het stuurprogramma dat u gebruikt. Alle MongoDB-stuurprogramma's die ik ken, hebben cursor.forEach() op de een of andere manier geïmplementeerd.

Hier zijn enkele voorbeelden:

node-mongodb-native

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

mongo's

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

monnik

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

mangoest

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

Documenten bijwerken binnen .forEach terugbellen

Het enige probleem met het bijwerken van documenten in .forEach terugbellen is dat je geen idee hebt wanneer alle documenten zijn bijgewerkt.

Om dit probleem op te lossen, moet u een asynchrone besturingsstroomoplossing gebruiken. Hier zijn enkele opties:

  • async
  • beloften (when.js, bluebird)

Hier is een voorbeeld van het gebruik van async , met behulp van de queue functie:

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. Match-finder met meerdere parameters met Redis

  2. 6 manieren om het jaar te krijgen vanaf een datum in MongoDB

  3. Unix-tijdstempel in seconden uit MongoDB ISODate halen tijdens aggregatie

  4. Een beveiligingschecklist voor MongoDB-productie-implementaties