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

Returner resultater mongoose i find-forespørgsel til en variabel

Der er flere måder at opnå det, du ønsker.

1. Brug af Mongoose Queries

I denne strategi returnerer din funktion en Mongoose-forespørgsel, som du senere kan bruge til at påkalde metoden exec og brug det til at få resultaterne.

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

Så kan du bruge det til at gøre:

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. Brug af Mongoose Promise-lignende objekter

Moogose giver støtte til løftelignende objekter. Alt du skal gøre er noget, der ligner det, jeg gjorde ovenfor, men denne gang påberåber du dig exec metode uden tilbagekald.

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

Så kan du bruge det ved blot at gøre:

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

Som fremhævet i kommentarfeltet til dette svar, er disse objekter ikke i virkeligheden løfter, og det skal tages i betragtning (se Forespørgsler er ikke løfter).

3. Brug af Mongoose Streams

Endelig har Mongoose også understøttelse af streams og streams er begivenhedsudsender. Så du kan få en stream og derefter abonnere på 'data'- og 'fejl'-hændelser. Sådan:

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

Så kan du blot gøre:

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

Kilde, til fremtidig reference.



  1. mongodb find efter flere array-elementer

  2. Meteor-app — nulstilling af en implementeret apps DB

  3. Spring data og mongodb - enkel roll back med fjeder inden for @Transactional

  4. Redis eller Mongo for at afgøre, om et tal falder inden for intervaller?