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

Retornar resultados mangusto na consulta de localização para uma variável


Existem várias maneiras de alcançar o que você deseja.

1. Usando consultas do Mongoose

Nesta estratégia, sua função retorna uma consulta do Mongoose que você pode usar posteriormente para invocar o método exec e usá-lo para obter os resultados.
function getJedisQuery(name){
   var query = Jedi.find({name:name});
   return query;
}

Então você pode usá-lo simplesmente fazendo:
var query =  getJedisQuery('Obi-wan');
query.exec(function(err,jedis){
   if(err)
      return console.log(err);
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});

2. Usando objetos do tipo Promise do Mongoose

Moogose fornece suporte para objetos do tipo promessa. Tudo o que você precisa fazer é algo semelhante ao que fiz acima, mas desta vez, você invoca o exec método sem um retorno de chamada.
function getJedisPromise(name){
   var promise = Jedi.find({name:name}).exec();
   return promise;
}

Então você pode usá-lo simplesmente fazendo:
var promise = getJedisPromise('Luke');
promise.then(function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
})

Conforme destacado na seção de comentários desta resposta, esses objetos não são de fato promessas e isso precisa ser levado em consideração (consulte Consultas não são promessas).

3. Usando fluxos de mangusto

Por fim, o Mongoose também tem suporte para streams e streams são emissores de eventos. Assim, você pode obter um fluxo e, em seguida, se inscrever para eventos de 'dados' e 'erro'. Assim:
function getjedisStream(name){
   var stream = Jedi.find({name:name}).stream();
   return stream;
}

Então você pode simplesmente fazer:
var stream = getJedisStream('Anakin');
stream.on('data', function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});
stream.on('error', function(error){
    console.log(error);
});

Fonte, para referência futura.