Mongodb Mongo:如果子对象在同一集合中,如何获取相关记录?
下面是数据结构的一个简化示例Mongodb Mongo:如果子对象在同一集合中,如何获取相关记录?,mongodb,linked-list,aggregate,aggregate-functions,Mongodb,Linked List,Aggregate,Aggregate Functions,下面是数据结构的一个简化示例 { _id: ObjectId, parentId: ObjectId } 其中父级的parentId为空,所有子级的parentId指向同一集合中的顶级记录 我有一个ID数组,可以是父ID,也可以是子ID,我需要检索所有父记录 因此,如果ID是针对父项的,请将所有设置都冷却 如果给定ID指向具有parentId的记录,请使用\u ID===parentId检索该记录 最后,我不能有重复项,因此如果我有一个指向我已经拥有的父记录的子ID(因为我被显式地赋予了ID
{ _id: ObjectId, parentId: ObjectId }
其中父级的parentId
为空,所有子级的parentId
指向同一集合中的顶级记录
我有一个ID数组,可以是父ID,也可以是子ID,我需要检索所有父记录
因此,如果ID是针对父项的,请将所有设置都冷却
如果给定ID指向具有parentId
的记录,请使用\u ID===parentId
检索该记录
最后,我不能有重复项,因此如果我有一个指向我已经拥有的父记录的子ID(因为我被显式地赋予了ID),那么只需获取唯一的父记录即可
所以我可以提出如下问题:
query: { _id: {$in: [2,3,4]}}
数据如
_id | parentId
1 | undefined
2 | 1
3 | undefined
4 | 3
它应该返回1,3
的记录,因为2
指向1
,虽然我有3
和4
,但顶层是3
如果给定ID指向具有parentId
的记录,请使用\u ID===parentId
检索该记录
可以使用聚合管道的阶段检索这些记录:
$lookup:
{
from: <collection name>,
localField: parentId,
foreignField: _id,
as: parentObj
}
$lookup:
{
发件人:,
localField:parentId,
foreignField:\u id,
as:parentObj
}
我不能有重复项,因此如果我有一个指向我已经拥有的父记录的子ID(因为我被显式地赋予了ID),那么只需获取唯一的父记录即可
聚合管道并不能很好地与之匹配。根据您的实现,您可以使用stage作为解决方法,如所示。是否有任何原因不能简单地搜索具有未定义parentId的所有记录?这样的查询不会返回所有父记录吗?