将查询返回结果mongoose到一个variables

我需要在node.js中返回带有mongoose的查询的结果。

你如何返回值来设置一个variables的值?

我需要做的是:

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

为了有:

 results = docs 

非常感谢您的回复 。

我也有另一个问题。

如何使用find或findOne在查询运算符中传递variables? 喜欢 :

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

有几种方法可以实现你想要的。

1.使用Mongoose查询

在这个策略中,你的函数返回一个Mongoose查询,你可以稍后调用exec方法来获取结果。

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

那么你可以简单的使用它:

 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.使用mongoose承诺

Moogose提供对promise的支持。 所有你需要做的是与上面所做的有些相似的东西,但是这一次,你不用callback就调用exec方法。

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

那么你可以简单地使用它:

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

3.使用mongoosestream

最后,Mongoose也支持stream和stream是事件发射器。 所以,你可以得到一个stream,然后订阅“数据”和“错误”事件。 喜欢这个:

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

那么你可以简单地做:

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

来源 ,供将来参考。