MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comprendre la recherche dans Node/Mongo

Je vous l'accorde, cette affaire est un peu bizarre. Voici pour la v2.2 de mongodb-native.

Tout d'abord, find a deux utilisations différentes . Vous pouvez soit donner une fonction de rappel ou non. Mais dans tous les cas , il renvoie de manière synchrone un objet. Plus précisément, il s'agit d'un curseur .On pourrait s'attendre à un mécanisme asynchrone lors du passage d'un callback mais pas ici.

collection.find({ }, function (err, cursor) {
  assert(!err);
});
console.log('This happens after collection.find({ }, callback)');

OU

const cursor = collection.find({});
console.log('Also happening after');

D'autre part, toArray est une fonction asynchrone et a également deux utilisations différentes. Cette fois, l'objet retourné est différent selon les arguments.

Sont équivalents :

cursor.toArray(function (err, documents) {
  assert.equal(1, documents.length);
});

ET

cursor.toArray()
  .then(documents => {
    assert.equal(1, documents.length);
  });

Au premier appel, toArray renvoie undefined alors que dans le second, il renvoie une Promise .