MongoDB - 从表中获取数据并检查另一个中是否存在id

时间:2015-09-21 13:19:50

标签: node.js mongodb

正如我的标题所说,是否可以在我的mongodb中查询(使用nodejs)数据列表,并检查另一个表中是否存在该ID?

所以我想说:

var users = new Schema({
name: String
});

我有另一张桌子:

var books = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'users' }
});

当我得到所有'用户,我想检查他们是否有书籍。我将如何在nodejs中进行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用嵌套循环和记录计数来实现此目的:

function getAllUsersWithBooks (callback) {
  var books_by_users = []

  // return only user_id
  user.find({}, {_id : 1}, function (e, ids) {
    if (e) return callback(e);

    var remaining = ids.length;

    ids.forEach(function (user) {
         books.find({user_id : user._id}, function (e, books) {
             if (e) return callback(e);

             var users_books = {user_id : user:_id, books : []};
             var books_left = books.length;

             books.forEach(function (b) {
                 users_books.books.push(b.toObject());
                 if (!--booksLeft) {
                    books_by_user.push(user_books);
                    if (!--remaining) {
                       callback(null, books_by_user);
                    }
                 }
             })
         })
    })
  })
}

getAllUsersWithBooks(function (e, list) {
    if (e) {
        // handle error
    }
    console.log(list);
    /*
      [{user_id : 123123, books : [b1, b2, etc],
       {user_id : 342342, books : [b3, b4, etc]}
     */
})