【发布时间】:2015-10-17 23:58:38
【问题描述】:
我想使用Mongoose Population 并从其他集合中获取一些信息。我的模型是:
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 = mongoose.Schema;
var schema = new mongoose.Schema({
user_name: String,
books: [{ type: Schema.Types.ObjectId, ref: 'Book' }]
});
var users = mongoose.model('users', schema);
module.exports = users;
我想将每个用户书籍存储在 books field 中,并从 Books collection 填充它们。但我无法理解,这种联系是如何发生的?我的Users 架构如何连接到Book 架构?我的意思是,书籍模式中的 _id 字段应该与用户模式中的 _id 相同?我没有具体说明我认为的任何关系,但在我阅读的每个教程中,它们都是这样的。我想分别填充每个用户书籍,但是在两个集合中进行比较的关键项目是什么?我在查找方法中做了什么吗?这是我的发现:
Users.find({book_name:name).populate('books').exec(
function(err, users) {
if (err) {
throw err;
}
var new_user = users;
}
);
事实上我的问题是,.populate('books') 是如何工作的。我从不说书籍模式中的哪个字段与用户模式相关。我糊涂了。
现在当我运行它时,我在填充字段中什么也没有,它是空的。我应该写一个保存方法并且保存的项目必须在这个关系下吗?在我的应用程序中,这两个集合分别从不同的来源填充。
【问题讨论】: