我正在尝试从嵌套结构中查找和投影。例如,我有以下文档,其中每个单元可能都有一个嵌入式子单元:
{
"_id" : 1,
"unit" : {
"_id" : 2,
"unit" : {
"_id" : 3,
"unit" : {
"_id" : 4
}
}
}
}
我想获得单元1下所有子单元的ID。
[{_id:2}, {_id:3}, {_id:4}]
$graphlookup
似乎无法处理这种嵌套结构。据我了解,当单元被保存在单个级别而不嵌套时,并且每个单元都引用其父单元时,它会起作用。
检索所需结果的正确方法是什么?
答案 0 :(得分:0)
首先,$graphlookup
不能解决您的问题,因为它是在document
上进行递归搜索,而不是在const a = {
"_id": 1,
"unit": {
"_id": 2,
"unit": {
"_id": 3,
"unit": {
"_id": 4
}
}
}
}
const parse = o => {
const { _id } = o;
if (!o.unit) return [{ _id }];
return [{ _id }, ...parse(o.unit) ];
}
console.log(parse(a.unit));
上进行递归搜索
$ graphLookup对带有选项的集合执行递归搜索 通过递归深度和查询过滤器限制搜索。
因此,它不是在文档中进行递归搜索,而是仅对集合(包括多个文档)进行递归搜索,无法处理您的问题。
对于您的问题,我认为这不是Mongo的责任,因为您已经检索了所需的文档。您想将检索到的文档解析为子文档数组,可以用您的语言来完成。
如果使用JavaScript(后端使用Node.JS)的示例,则可以将此文档解析为数组:
//
答案 1 :(得分:0)
您不能从mongodb查询中执行此操作。 Mongodb将用id :1
保证文档,并且不会在文档内部递归搜索。
您可以做的是:从mongodb中检索文档,然后将其解析为Map对象,然后递归地从该地图中检索信息。