我希望在mongo数组中添加一个_id作为对象的属性。
这是好习惯吗? 索引有问题吗?
答案 0 :(得分:18)
我希望在mongo数组中添加一个_id作为对象的属性。
我假设:
{
g: [
{ _id: ObjectId(), property: '' },
// next
]
}
此问题的结构类型。
这是好习惯吗?
不正常。 _id
是实体的唯一标识符。因此,如果您要在子文档对象中添加_id
,那么您可能没有很好地规范化您的数据,这可能是您的架构设计中存在根本缺陷的迹象。
子文档旨在包含该文档的重复数据,即地址或用户或其他内容。
据说_id
并不总是一件坏事。以我刚才用地址说的例子为例。想象一下,你有一个购物车系统和(由于某种原因)你没有将地址复制到订单文档然后你会使用_id
或其他一些标识符来获取该子文档。
此外,您还必须考虑链接文档。如果_id
描述了另一个文档,并且属性是与该链接文档相关的该文档的自定义属性,那也没关系。
索引编制有问题吗?
ObjectId
仍然非常庞大,因此需要考虑较小的,不那么独特的ID,或者根本不使用_id
子文档。
对于索引,它与文档本身的标准_id
字段没有任何不同,并且整个字段中的唯一索引应该在整个集合中起作用(依赖于场景,测试您的查询)。
注意:MongoDB不会为您的子文档添加_id
。