MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Gibt Ergebnisse Mungo in einer Suchabfrage an eine Variable zurück

Es gibt mehrere Möglichkeiten, das zu erreichen, was Sie wollen.

1. Mongoose-Abfragen verwenden

Bei dieser Strategie gibt Ihre Funktion eine Mongoose-Abfrage zurück, mit der Sie später die Methode exec aufrufen können und verwenden Sie es, um die Ergebnisse zu erhalten.

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

Dann können Sie es einfach verwenden:

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. Verwenden von Mongoose Promise-ähnlichen Objekten

Moose bietet Unterstützung für Promise-ähnliche Objekte. Alles, was Sie tun müssen, ist etwas Ähnliches wie oben, aber dieses Mal rufen Sie die exec auf Methode ohne Callback.

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

Dann können Sie es verwenden, indem Sie einfach Folgendes tun:

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

Wie im Kommentarbereich dieser Antwort hervorgehoben, handelt es sich bei diesen Objekten nicht um Versprechen, und das muss berücksichtigt werden (siehe Abfragen sind keine Versprechungen).

3. Verwenden von Mongoose-Streams

Schließlich unterstützt Mongoose auch Streams und Streams sind Event-Emitter. Sie könnten also einen Stream erhalten und dann 'Daten'- und 'Fehler'-Ereignisse abonnieren. So:

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

Dann können Sie einfach Folgendes tun:

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

Quelle, für zukünftige Referenz.