我使用 Mongoose 4.1.12。我的架构:
var UserSchema = new Schema({
_id: {type: String}, // unique nickname
name: {type: String}
});
var BookSchema = new Schema({
authors: [{type: String,ref:"User"}] // list of nicknames
});
假设有 2 个用户注册,昵称是:igor 和 kristina。
还有一本书,收录了作者:igor、kristina、luke。
然后我这样做:
Book.findOne({}).populate("authors").exec(function(err,book){...})
一本书现在在“authors”集合中只包含 2 个对象,因为 luke 用户不存在。
book: {
authors: [
{ _id: "igor", name: "Igor" },
{ _id: "kristina", name: "Kristina" }
]
}
我期望这样的事情:
book: {
authors: [
{ _id: "igor", name: "Igor" },
{ _id: "kristina", name: "Kristina" },
"luke"
]
}
可能吗?
最佳答案
填充引用字段时,引用的基础文档不需要预先存在。
此外,当基础文档引用字段尚未填充,并且您正在检索带有引用字段的文档时,该值将为:
- 如果您处于 .populate(xxx) 模式,则为 null
- 否则引用的值
引用链接发生在运行时
因此,在您在书中查找的上述预期显示中,由于您使用的是模式:.populate(),最后作者数组元素“luke”将显示为 null,因为缺少底层“用户”文档
关于node.js - Mongoose:它对未找到的引用有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225375/