mongoose中的嵌套查询,用于检查另一个集合中是否存在值

时间:2015-07-28 20:34:32

标签: javascript node.js mongodb mongoose

Node.js应用Mongoose

中,我有两个集合,UsersBooks

用户架构:

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

我无法完成此代码的第二步。

1 个答案:

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