【发布时间】:2020-08-26 00:52:41
【问题描述】:
我正在与我的经理就数据库结构发生争执。
我们需要创建一个具有多个子对象的父类型对象,并查询属于该父对象的所有子对象的列表。
我想在父对象中使用一组子 ObjectId,它们是在创建子对象时添加的。可以使用 FindById 找到父列表,然后可以使用 populate() 填充子列表。
我的经理坚持不在父对象中存储一个子数组,而只是将父对象的id作为一个字段存储在每个子对象中,然后通过搜索所有子对象得到列表具有父 ID 的对象。他声称这将同样快,因为“无论如何填充只是通过 id 搜索对象”。
但是,在我看来,它会这么快是不可思议的。 _id 字段的全部意义不在于索引文件的位置以便快速检索吗?与在整个数据库中搜索给定字段与给定值匹配的对象相比,查找具有 _id 的对象列表不应该总是更快且更具可扩展性吗?
在这种情况下不使用填充有什么理由吗? (当然,在子对象中存储对父对象的引用也是一种选择 - 但他坚持不根本不将子对象数组存储在父对象中。)
【问题讨论】:
-
如果父级的嵌入文档有限,那么您应该将子级直接存储在父级中。如果没有,那么在孩子身上有父母的身份证是一个更好的方法。
标签: mongodb performance indexing mongoose-populate