14

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

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

4

1 回答 1

21

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

我假设:

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

此问题的结构类型。

这是好习惯吗?

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

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

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

您还必须考虑链接文档。如果这_id描述了另一个文档,并且属性是该文档相对于该链接文档的自定义属性,那么也可以。

索引有什么问题吗?

An仍然相当大,因此对于较小、较不唯一的 id 或根本不使用子文档ObjectId,这是需要考虑的事情。_id

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

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

于 2012-11-20T13:41:23.303 回答