将查询返回结果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); });
来源 ,供将来参考。