使用Mongoose填充其他集合中的记录数

时间:2015-07-23 10:03:04

标签: node.js mongodb mongoose

我有2个Mongoose模型,Book和Users。我想这样做:当找到一本书时,我想得到当前图书用户的数量。

这是图书模型:

var mongoose = require('mongoose');
var Users = require('../users');
var schema = new mongoose.Schema({
    book_name: String,
    book_publisher: String
});
var book = mongoose.model('book', schema);
module.exports = book;

这是用户模型:

var mongoose = require('mongoose');
var Book = require('../book');
var schema = new mongoose.Schema({
    user_name: String,
    book_id: String
});
var users = mongoose.model('users', schema);
module.exports = users;

我拿这样一本书:

Book.find({book_name:name).exec(
        function(err, book) {
            if (err) {
                throw err;
            }
            var new_book = book;
        }
);

现在tis代码获取一本书,但我想填充Users模型中的用户数并将它们添加到新获取的书对象中。

我读过这份文件,但我无法做到这一点: Population

2 个答案:

答案 0 :(得分:0)

您想要做的通常称为反向查找。幸运的是,有人已经为此创建了一个模块。它似乎不是一个非常常用的模块,但您可以看到它是否符合您的需求:reverse-populate

答案 1 :(得分:0)

User = new mongoose.Schema({
 //existing user properties
 owned_books: [{type: mongoose.Schema.Types.ObjectId, ref: 'book'}]
}}
var users = mongoose.model('users', User);

var schema = new mongoose.Schema({
  book_name: String,
  book_publisher: String,
  owner_ids: [{type: mongoose.Schema.Types.ObjectId, ref: 'users'}]
});
var book = mongoose.model('book', schema);

当您向人们添加书籍或书籍时,您需要更新这两个架构。要获取当前的图书用户,只需找到该图书,然后获取该图书的owner_ids字段。