【问题标题】:Mongo _id for subdocument array子文档数组的 Mongo _id
【发布时间】:2018-05-29 12:57:07
【问题描述】:

我希望为 mongo 数组中的对象添加一个 _id 作为属性。

这是一个好习惯吗? 索引有什么问题吗?

【问题讨论】:

标签: mongodb


【解决方案1】:

我希望为 mongo 数组中的对象添加一个 _id 作为属性。

我假设:

{
    g: [
        { _id: ObjectId(), property: '' },
        // next
    ]
}

此问题的结构类型。

这是好的做法吗?

不正常。 _ids 是实体的唯一标识符。因此,如果您希望在子文档对象中添加 _id,那么您可能没有很好地规范化您的数据,这可能表明您的架构设计存在根本缺陷。

子文档旨在包含该文档的重复数据,即地址或用户等。

话虽这么说_id 添加并不总是一件坏事。以我刚才提到的地址为例。假设您有一个购物车系统,并且(出于某种原因)您没有将地址复制到订单文档,然后您将使用 _id 或其他标识符来获取该子文档。

您还必须考虑链接文档。如果 _id 描述了另一个文档,并且属性是该文档与该链接文档相关的自定义属性,那也没关系。

索引有什么问题吗?

ObjectId 仍然相当大,因此对于较小、不那么唯一的 id 或根本不将 _id 用于子文档,需要考虑这一点。

对于索引,它与文档本身的标准 _id 字段并没有什么不同,并且跨字段的唯一索引应该在整个集合中起作用(取决于场景,测试您的查询)。

注意:MongoDB 不会为您将_id 添加到子文档中。

【讨论】:

  • @aioobe 我认为在这种情况下是的,我的意思是规范化,这是一个非常古老的答案,但我相信我的意思是他没有很好地分离实体,这将是规范化。
  • 如果我在子文档上创建一个 mongodb 对象 _id,该 _id 在整个集合中是否自动唯一?
  • 在 90% 的情况下,是的,但是时间片段可能会发生冲突,但是,MongoDB 前段时间做了一些修复
  • 90%真的吓人.. :s
  • 我想添加 Mongoose,另一方面,为每个子文档自动添加一个_id
猜你喜欢
  • 1970-01-01
  • 2015-01-05
  • 2014-01-02
  • 2016-03-12
  • 2017-12-27
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多