MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Entendendo a localização no Node/Mongo


Admito que este caso é um pouco estranho. Aqui está a versão 2.2 do mongodb-native.

Em primeiro lugar, find tem dois usos diferentes . Você pode dar uma função de retorno de chamada ou não. Mas em qualquer caso , ele retorna de forma síncrona um objeto. Mais precisamente, é um cursor .Poderíamos esperar um mecanismo assíncrono ao passar um retorno de chamada, mas não aqui.
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');

Por outro lado, toArray é uma função assíncrona e também tem dois usos diferentes. Desta vez, o objeto retornado é diferente dependendo dos argumentos.

São equivalentes:
cursor.toArray(function (err, documents) {
  assert.equal(1, documents.length);
});

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

Na primeira chamada, toArray retorna undefined enquanto no segundo, ele retorna uma Promise .