MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Renvoie les résultats de la mangouste dans la requête de recherche à une variable

Il existe plusieurs façons d'obtenir ce que vous voulez.

1. Utilisation des requêtes Mongoose

Dans cette stratégie, votre fonction renvoie une requête Mongoose que vous pourrez ensuite utiliser pour invoquer la méthode exec et utilisez-le pour obtenir les résultats.

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

Ensuite, vous pouvez l'utiliser simplement en faisant :

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. Utilisation d'objets de type Mongoose Promise

Moogose prend en charge les objets de type promesse. Tout ce que vous avez à faire est quelque chose de similaire à ce que j'ai fait ci-dessus, mais cette fois, vous invoquez le exec méthode sans rappel.

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

Ensuite, vous pouvez l'utiliser en faisant simplement :

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

Comme souligné dans la section commentaire de cette réponse, ces objets ne sont en fait pas des promesses et cela doit être pris en compte (voir Les requêtes ne sont pas des promesses).

3. Utilisation des flux Mongoose

Enfin, Mongoose prend également en charge les flux et les flux sont des émetteurs d'événements. Ainsi, vous pouvez obtenir un flux, puis vous abonner aux événements « données » et « erreur ». Comme ceci :

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

Ensuite, vous pouvez simplement faire :

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

Source, pour référence future.