MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak mogę użyć cursor.forEach() w MongoDB przy użyciu Node.js?

Odpowiedź zależy od sterownika, którego używasz. Wszystkie sterowniki MongoDB, które znam, mają cursor.forEach() zaimplementowane w taki czy inny sposób.

Oto kilka przykładów:

node-mongodb-natywny

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

mongojki

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

mnich

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

mangusta

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

Aktualizowanie dokumentów wewnątrz .forEach oddzwonienie

Jedyny problem z aktualizacją dokumentów w .forEach wywołanie zwrotne jest takie, że nie masz pojęcia, kiedy wszystkie dokumenty są aktualizowane.

Aby rozwiązać ten problem, powinieneś użyć rozwiązania asynchronicznego sterowania przepływem. Oto kilka opcji:

  • asynchroniczna
  • obietnice (kiedy.js, bluebird)

Oto przykład użycia async , używając swojej queue funkcja:

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. Błąd krytyczny:nie znaleziono klasy „MongoDB\Driver\Manager”

  2. MongoDB - różni się od zapytania nie używa indeksów

  3. Proaktywne monitorowanie MongoDB (kąt programisty/doradców)

  4. MongoDb c# driver znajduje element w tablicy według wartości pola

  5. Mongoid Group By lub MongoDb group by w szynach