我的中有以下架构taxon
收藏 :
{
"_id": 1,
"na": [ "root_1",
"root_2",
"root_3" ],
"pa": 1
},{
"_id": 2,
"na": [ "name_1",
"name_2",
"name_3"],
"pa": 1
},{
"_id": 4,
"na": [ "otherName_1",
"otherName_2",
"otherName_3"],
"pa": 2
}
每个文档通过父字段与另一个文档相关,父字段对应于_id
它的父级。
我想执行递归搜索以获得以下结果:
{ "_id": 4,
"nameList": [ "otherName_1",
"name_1",
"root_1"]
}
从具有一定的文档_id
, 获取第一项na
每个父级的数组,直到文档_id: 1
到达了
我目前通过执行 X 查询(由父文档执行一个查询,这里是 3 个)来获得此结果,但我非常确定这可以使用单个查询来实现。我已经看过新的了$graphLookup https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/操作员,但无法按照我的方式进行操作......
是否可以使用 MongoDB 3.4.1 在单个查询中实现此目的?
Edit
我每次都会运行 50 个文档,因此最佳解决方案是将所有内容合并到一个查询中
例如,它看起来像
var listId = [ 4, 128, 553, 2728, ...];
var cursor = db.taxon.aggregate([
{$match:
{ _id: {$in: listId}}
}, ...
)];
并会输出:
[{ "_id": 4,
"nameList": [ "otherName_1",
"name_1",
"root_1"]
}, { "_id": 128,
"nameList": [ "some_other_ame_1",
"some_name_1",
"root_1"]
}, { "_id": 553,
"nameList": [ "last_other_ame_1",
"last_name_1",
"root_1"]
} ... ]
网上试试:mongoplayground.net/p/GFP-L03Ub0Y https://mongoplayground.net/p/Gfp-L03Ub0Y