MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Restituisce i risultati mangusta nella query di ricerca a una variabile

Ci sono diversi modi per ottenere ciò che desideri.

1. Utilizzo delle query Mongoose

In questa strategia, la tua funzione restituisce una query Mongoose che puoi utilizzare in seguito per invocare il metodo exec e usalo per ottenere i risultati.

function getJedisQuery(name){
   var query = Jedi.find({name:name});
   return query;
}

Quindi puoi usarlo semplicemente facendo:

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. Utilizzo di oggetti simili a quelli di Mongoose

Moogose fornisce supporto per oggetti simili a promesse. Tutto quello che devi fare è qualcosa di simile a quello che ho fatto sopra, ma questa volta invochi il exec metodo senza una richiamata.

function getJedisPromise(name){
   var promise = Jedi.find({name:name}).exec();
   return promise;
}

Quindi puoi usarlo semplicemente facendo:

var promise = getJedisPromise('Luke');
promise.then(function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
})

Come evidenziato nella sezione commenti di questa risposta, questi oggetti non sono in realtà promesse e questo deve essere preso in considerazione (vedi Le query non sono promesse).

3. Utilizzo di Mongoose Stream

Infine, Mongoose ha anche il supporto per i flussi e i flussi sono emettitori di eventi. Quindi, potresti ottenere uno stream e quindi iscriverti agli eventi "dati" ed "errore". In questo modo:

function getjedisStream(name){
   var stream = Jedi.find({name:name}).stream();
   return stream;
}

Quindi puoi semplicemente fare:

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, per riferimento futuro.