首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在graphLookup中简化MongoDB输出

在graphLookup中简化MongoDB输出
EN

Stack Overflow用户
提问于 2021-02-17 13:08:51
回答 1查看 145关注 0票数 1

我有一个收集“人物”的形式:

代码语言:javascript
复制
{ "_id" : 1, "name" : "Grandma"}   
{ "_id" : 2, "name" : "Mum", "parentID": "1"}  
{ "_id" : 3, "name" : "Uncle", "parentID": "1"}  
{ "_id" : 4, "name" : "Kid", "parentID": "2"}  
{ "_id" : 5, "name" : "Sister", "parentID": "2"}

要获得某个人的祖先(比如Kid),我可以使用简单的match和graphLookup,如下所示:

代码语言:javascript
复制
people.aggregate([  
    {$match: {_id: "3"}},  
    {$graphLookup:  
        {  
        from: "people",  
        startWith: "$parentID",  
        connectFromField: "parentID",  
        connectToField: "_id",  
        as: "ancestors"  
        }  
    }  
])

会回来的

代码语言:javascript
复制
{ "_id" : 3, "name" : "Kid", "parentID": "2", "ancestors": [
    { "_id" : 1, "name" : "Grandma"},
    { "_id" : 2, "name" : "Mum", "parentID": "1"}]
}

我被困住的地方是如何将输出数据重构为一个单层数组,这样:

代码语言:javascript
复制
array = [  
{ "_id" : 1, "name" : "Grandma"},    
{ "_id" : 2, "name" : "Mum", "parentID": "1"},  
{ "_id" : 3, "name" : "Kid", "parentID": "2"}  
]

(数组顺序不重要)。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 16:02:03

  • 只需将startWith从parentID更改为_id,这将返回带有当前文档的ancestors
  • 显示所需字段的$project
代码语言:javascript
复制
result = people.aggregate([
  { $match: { _id: "3" } },
  {
    $graphLookup: {
      from: "collection",
      startWith: "$_id",
      connectFromField: "parentID",
      connectToField: "_id",
      as: "ancestors"
    }
  },
  {
    $project: {
      _id: 0,
      ancestors: 1
    }
  }
])

游乐场

通过以下方式访问数组:

代码语言:javascript
复制
finalResult = result[0]['ancestors']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66242574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档