Mongo _id用于子文档数组

时间:2012-11-20 11:50:10

标签: mongodb

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

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

1 个答案:

答案 0 :(得分:18)

  

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

我假设:

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

此问题的结构类型。

  

这是好习惯吗?

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

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

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

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

  

索引编制有问题吗?

ObjectId仍然非常庞大,因此需要考虑较小的,不那么独特的ID,或者根本不使用_id子文档。

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

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