我有一个循环来通过Mongoose执行多个查询
"use strict";
var Mongoose = require("mongoose");
var User = Mongoose.model("User");
var Cache = {};
for (var index=0; index<usernames.length; index++) {
var query = {
username:usernames[index]
};
User.find(query).
exec(function(error,users){
//THIS IS A CALLBACK FUNCTION,
//HOW TO GET THE 'query' VARIABLE ABOVE?
//I WANT TO PUT THE RESULT INTO CACHE:
var username = users[0].username;
Cache[username] = users[0];
});
}
我需要知道上面的回调函数中哪个查询的结果。 它用于数据库查询缓存目的。我可以提取用户名&#39;来自&#39;用户[0]&#39;,但当数组&#39;用户&#39;是空的,没有这样的事情。
答案 0 :(得分:1)
将匿名函数放入循环中;如果您只对第一位用户感兴趣或.findOne()
值是唯一的,请使用.find()
代替username
。
for (var index = 0; index < usernames.length; index++) {
(function () {
var query = {
username: usernames[index]
};
User.findOne(query).
exec(function (error, user) {
//use your query here
var username = user.username;
Cache[username] = user;
});
})()
}
但请考虑async进行此类操作。