sql >> Base de Datos >  >> NoSQL >> MongoDB

Devuelve los resultados de la mangosta en la consulta de búsqueda a una variable

Hay varias formas de lograr lo que quieres.

1. Uso de consultas Mongoose

En esta estrategia, su función devuelve una consulta Mongoose que luego puede usar para invocar el método exec y utilícelo para obtener los resultados.

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

Entonces puedes usarlo simplemente haciendo:

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. Uso de objetos tipo Mongoose Promise

Moogose proporciona soporte para objetos similares a promesas. Todo lo que tienes que hacer es algo similar a lo que hice anteriormente, pero esta vez, invocas el exec método sin devolución de llamada.

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

Entonces puedes usarlo simplemente haciendo:

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

Como se destaca en la sección de comentarios de esta respuesta, estos objetos no son, de hecho, promesas y eso debe tenerse en cuenta (consulte Las consultas no son promesas).

3. Uso de Mongoose Streams

Finalmente, Mongoose también tiene soporte para flujos y los flujos son emisores de eventos. Por lo tanto, puede obtener una transmisión y luego suscribirse a los eventos de 'datos' y 'error'. Así:

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

Entonces simplemente puede hacer:

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);
});

Fuente, para referencia futura.