Node.js
应用Mongoose
的中,我有两个集合,Users
和Books
:
用户架构:
var schema = new mongoose.Schema({
user_name: String,
user_family: String,
has_book: { type: Boolean, default: false }
});
这是Book schema:
var schema = new mongoose.Schema({
book_name: String,
book_user: String //contains id of a single user
});
我想获取所有用户,如果每个用户在Book
集合中都有一本书,那么该用户的has_book
字段填充为true。我想我需要一个嵌套查询。一个用于获取所有用户,另一个用于检查每个用户是否存在该书。我如何编写嵌套查询?
User.find().sort("-_id").limit(5).exec(
function(err, results) {
if (err) {
throw err;
}
var userID = socket.request.session.passport.user;
if(userID){
//check for existence of a book belongs to each user
// if exist, has_book field of User schema should be turn to true
}
return result //main result array after two queries
}
);
我无法完成此代码的第二步。
答案 0 :(得分:0)
我认为您只需要在用户架构上保存图书ID。
但如果你不能自定义数据库做隐性功能调用
function checkForBook(users, callback, _results) {
_results = _results || [];
if(users.length < 1)
callback(null, _results);
var user = user.shift();
Book.count({book_user: user._id}, function(err, bookCount){
if(err)
return callback(err);
user.has_book = true;
_results.push(user);
checkForBook(users, callback, _results);
});
}
User.find().exce(function(err, usersData){
checkForBook(usersData, function(err, usersData){
if(err)
// do error handle
else
// do you favor
});
});