Mongo _id用于子文档数组

dan*_*car 9 mongodb

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

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

Sam*_*aye 19

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

我假设:

{
    g: [
        { _id: ObjectId(), property: '' },
        // next
    ]
}
Run Code Online (Sandbox Code Playgroud)

此问题的结构类型.

这是好习惯吗?

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

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

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

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

索引有问题吗?

A ObjectId仍然相当大,因此需要考虑较小的,不太独特的ID或者根本不使用_id子文档.

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

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

  • 我想补充一点,Mongoose,另一方面,*将*自动为每个子文档添加一个“_id”。 (2认同)