sql >> Databasteknik >  >> NoSQL >> MongoDB

Returnera resultat mongoose i sökfrågan till en variabel

Det finns flera sätt att uppnå det du vill.

1. Använda Mongoose Queries

I den här strategin returnerar din funktion en Mongoose-fråga som du senare kan använda för att anropa metoden exec och använd den för att få resultaten.

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

Då kan du använda det helt enkelt genom att:

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. Använda Mongoose Promise-liknande objekt

Moogose ger stöd för löftesliknande föremål. Allt du behöver göra är något som liknar det jag gjorde ovan, men den här gången anropar du exec metod utan återuppringning.

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

Sedan kan du använda den genom att helt enkelt göra:

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

Som framhållits i kommentarsavsnittet i det här svaret är dessa objekt i själva verket inte löften och det måste tas med i beräkningen (se Frågor är inte löften).

3. Använda Mongoose Streams

Slutligen har Mongoose också stöd för strömmar och strömmar är händelsesändare. Så du kan få en stream och sedan prenumerera på "data" och "fel" händelser. Så här:

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

Sedan kan du helt enkelt göra:

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

Källa, för framtida referens.



  1. Förstå MongoDB BSON Dokumentstorleksgräns

  2. Hur Redis-listor kan användas för att implementera ett chattsystem?

  3. 3 sätt att välja raden med minimivärdet i SQL

  4. DB med bästa inserts/sek prestanda?