Retourner les résultats mongoose dans find query vers une variable

je dois retourner les résultats d'une requête avec mongoose dans le noeud.js.

Comment retourner la valeur pour la définir à une variable?

Ce que je dois faire c'est:

var results = users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {            
        return docs;
    };
});

afin d'avoir:

results = docs 

Merci beaucoup pour votre réponse .

j'ai aussi un autre problème.

Comment passer une variable dans un opérateur de requête avec find ou findOne? Comme:

var foo = "Blaa";

users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {
        // I want to use the foo variable here
        console.log(foo);
    };
});
20
demandé sur Julien Le Coupanec 2014-06-04 15:10:51

3 réponses

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

1. À L'Aide De La Mangouste Requêtes

Dans cette stratégie, votre fonction retourne une Mangouste requête que vous pourrez ensuite utiliser pour invoquer la méthode exec et l'utiliser 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. À L'Aide De La Mangouste Promesses

Moogose soutient les promesses. Tout ce que vous avez à faire est de quelque chose de semblable à 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 simplement en faisant:

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

3. Utilisation Des Flux De Mangouste

enfin, Mongoose supporte aussi les flux et les flux sont des émetteurs d'événements. Ainsi, vous pouvez obtenir un flux puis vous abonner aux événements 'data' et 'error'. Comme ceci:

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

alors 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.

58
répondu Edwin Dalorzo 2016-07-17 20:48:12

il est exécuté avant la mission.

async function(req, res) {
  var user;
  await users.findOne({}, function(err,pro){
      user=pro;
    });
  console.log(user); \ it's define

});
5
répondu Javad.mrz 2018-02-05 12:50:12

vous obtenez le résultat désiré par le code suivant. Espérons que cela vous aide beaucoup..

var async = require('async');

// custom imports
var User = require('../models/user');
var Article = require('../models/article');

var List1Objects = User.find({});
var List2Objects = Article.find({});
var resourcesStack = {
    usersList: List1Objects.exec.bind(List1Objects),
    articlesList: List2Objects.exec.bind(List2Objects),
};

async.parallel(resourcesStack, function (error, resultSet){
    if (error) {
        res.status(500).send(error);
        return;
    }
    res.render('home', resultSet);
});
0
répondu Surender Singh 2018-06-24 18:55:11