猫鼬:未找到参考文献会怎么做?

时间:2015-10-19 23:02:32

标签: node.js mongodb mongoose

我使用的是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){...})

现在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"
    ]
}

有可能吗?

1 个答案:

答案 0 :(得分:0)

填充ref字段时,引用的基础文档不需要预先存在。

此外,当尚未填充基础文档引用字段,并且您正在检索带有ref字段的文档时,该值将为:

  1. 如果你的身份是.populate(xxx)模式
  2. ,则为null
  3. 否则为
  4. 的值

    引用链接在运行时发生

    因此,在您上面预期的书籍查找显示中,因为您使用的是模式:.populate(),这是最后一个作者数组元素' luke'由于基础'用户'将显示为null。文件丢失