【问题标题】:One-To-One relationship with mongoose?与猫鼬的一对一关系?
【发布时间】:2019-03-02 13:45:26
【问题描述】:

我知道如何使用以下类型的代码在 Mongoose 实体之间建立一对多关系:

friends: [{type: ObjectId, ref: 'User'}]

但是如果我只想建立一对一的关系——比如这个用户与哪个客户相关?

【问题讨论】:

  • 那么干脆不要使用数组。
  • 谢谢,但这并没有真正帮助 - 我是使用 node 和 mongoose 的新手,所以语法对我来说是陌生的。

标签: node.js mongodb mongoose


【解决方案1】:

首先,MongoDB 中的关系与基于 SQL 的数据存储中的关系之间存在巨大差异(您需要从一开始就清楚这一点)。

MongoDB 中的关系只是相关数据的表示。没有任何机制可以维护这些关系的完整性。

mongoose 对 refs 所做的只是使用具有ref 选项的字段来查询引用集合中文档的_id 字段。这用于populate 之类的操作(内部调用目标集合上的findById 查询并将引用的字段替换为文档)。

清除后,您可以在字段中存储一个或多个引用集合的 ID,从而创建一对一或一对多的“关系”。

因此,要为引用的集合存储单个 ID,语法为:

client: {type: Mongoose.Schema.Types.ObjectId, ref: 'Client'}  //No arrays, as we want to store a single ID only.

同样,您可以为引用的集合存储多个 ID,如下所示:

friends: [{type: Mongoose.Schema.Types.ObjectId, ref: 'User'}] //The array stores multiple IDs, creating a one-to-many "relationship"

编辑:

确保您在开头有 required Mongoose 模块。

var Mongoose = require('mongoose');

【讨论】:

  • 当我这样做时,我收到以下错误:“参考错误:未定义 ObjectId”
  • 您是否使用npm install 安装了Mongoose 模块?
  • 是的。我的一切都适用于与我的 mongo 数据库的各种交互。但是当我尝试使用这种语法时,它不喜欢它。它适用于数组(就像您展示的朋友示例)但没有它抱怨的数组。
  • 我实际上只是复制并粘贴了它-但将“客户”更改为“公司”-因为这是我的模型的名称-但它确实不喜欢 ObjectId-我两者都有那里的编辑行。
  • 您使用的是哪个版本的 Mongoose?在旧版本中,只能使用 Mongoose.Schema.ObjectId 访问 ObjectId
【解决方案2】:

对于一对一的关系,使用嵌入式数据模型,因此您的应用程序可以通过一次查询来检索完整的信息检索。欲了解更多信息,请访问 https://docs.mongodb.com/manual/tutorial/model-embedded-one-to-one-relationships-between-documents/

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2018-01-22
    • 2018-08-23
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2023-03-19
    相关资源
    最近更新 更多