Xan*_*rus 23 mongoose mongodb node.js mongodb-query
我需要在node.js中使用mongoose返回查询结果.
如何返回值以将值设置为变量?
我需要做的是:
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;
};
});
Run Code Online (Sandbox Code Playgroud)
为了有:
results = docs
Run Code Online (Sandbox Code Playgroud)
非常感谢您的回复 .
我还有另一个问题.
如何使用find或findOne在查询运算符中传递变量?喜欢 :
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);
};
});
Run Code Online (Sandbox Code Playgroud)
Edw*_*rzo 66
有几种方法可以达到你想要的效果.
1.使用Mongoose查询
在此策略中,您的函数返回一个Mongoose查询,您稍后可以使用该查询来调用该方法exec
并使用它来获取结果.
function getJedisQuery(name){
var query = Jedi.find({name:name});
return query;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地使用它:
var query = getJedisQuery('Obi-wan');
query.exec(function(err,jedis){
if(err)
return console.log(err);
jedis.forEach(function(jedi){
console.log(jedi.name);
});
});
Run Code Online (Sandbox Code Playgroud)
2.使用类似Mongoose Promise的对象
Moogose为类似承诺的对象提供支持.您所要做的就是与我上面所做的有些相似,但这一次,您在exec
没有回调的情况下调用该方法.
function getJedisPromise(name){
var promise = Jedi.find({name:name}).exec();
return promise;
}
Run Code Online (Sandbox Code Playgroud)
然后您只需执行以下操作即可使用它:
var promise = getJedisPromise('Luke');
promise.then(function(jedis){
jedis.forEach(function(jedi){
console.log(jedi.name);
});
})
Run Code Online (Sandbox Code Playgroud)
正如本答案的评论部分所强调的那样,这些对象实际上并不是承诺,需要将其考虑在内(请参阅查询不是承诺).
3.使用Mongoose Streams
最后,Mongoose还支持流和流是事件发射器.因此,您可以获得一个流,然后订阅"数据"和"错误"事件.像这样:
function getjedisStream(name){
var stream = Jedi.find({name:name}).stream();
return stream;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地做:
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);
});
Run Code Online (Sandbox Code Playgroud)
来源,供将来参考.
小智 5
它正在分配之前执行.
async function(req, res) {
var user;
await users.findOne({}, function(err,pro){
user=pro;
});
console.log(user); \\ it's define
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56829 次 |
最近记录: |