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的所有记录?这样的查询不会返回所有父记录吗?