node.js - Mongoose:它对未找到的引用有什么作用?

标签 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 个用户注册,昵称是:igorkristina

还有一本书,收录了作者:igorkristinaluke

然后我这样做:

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

可能吗?

最佳答案

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

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

  1. 如果您处于 .populate(xxx) 模式,则为 null
  2. 否则引用的值

引用链接发生在运行时

因此,在您在书中查找的上述预期显示中,由于您使用的是模式:.populate(),最后作者数组元素“luke”将显示为 null,因为缺少底层“用户”文档

关于node.js - Mongoose:它对未找到的引用有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225375/

相关文章:

node.js - MongoDB/Mongoose 聚合或 $or 未按预期工作?

node.js - Mongoose bool 值默认为 false

javascript - Mongoose 模式

javascript - Node.js,异步和 if 语句

node.js - 在与主后端端口不同的端口上运行 Varnish 探针

arrays - Mongodb:查询嵌套在数组中的json对象

javascript - Mongoose ,解析嵌入式数组中的路径

javascript - Nodejs + SocketIO + MySql 连接未正确关闭并创建数据库开销

node.js - Mongodb 和 Express.js : Automatically creating the db and collections based on Models

java - 使用 JDBC 连接到云中托管的 MongoDB 时出错