首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MongoDB返回数组字段的键

问从MongoDB返回数组字段的键
EN

Stack Overflow用户
提问于 2020-04-13 11:34:13
回答 2查看 56关注 0票数 1

下面是mongodb收集的示例数据。我正在尝试触发一个查询,该查询将返回集合中的属性和数组。

示例文档:

代码语言:javascript
复制
{
    "_id" : ObjectId("5e940d6c2f804ab99b24a633"),
    "accountId" : ObjectId("7e1c1180d59de1704ce43557"),
    "description":"some desc",
    "configs": {},
    "dependencies" : [ 
        {
            "commute" : {},
            "distance" : {},
            "support":{}
        }
    ]
}

预期输出:

代码语言:javascript
复制
{
    [0]:commute
    [1]:distance
    [2]:support
}

我尝试获取响应并迭代依赖项对象,还尝试使用es6将其转换为数组对象。但这是一个昂贵的操作,因为这个列表将是非常大的。如果有,则在Mongo中存在将响应转换为数组的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 16:06:28

您可以尝试下面的聚合查询:

代码语言:javascript
复制
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      dependenciesKeys: {
        $reduce: {
          input: "$dependencies", // Iterate over 'dependencies' array
          initialValue: [],
          in: {
            $concatArrays: [ /** concat each array returned by map with holding 'value */'
              "$$value",
              {
                $map: {
                  input: {
                    $objectToArray: "$$this" /** Convert each object in 'dependencies' to array [{k:...,v:...},{k:...,v:...}] & iterate on each object */
                  },
                  in: "$$this.k" // Just return keys from each object
                }
              }
            ]
          }
        }
      }
    }
  }
])

测试: MongoDB-游乐场

参考文献: $reduce,$map,$concatArrays,$objectToArray & $project

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 12:19:43

我认为您应该尝试对象到数组,它是一个聚合管道操作符。

此外,聚集管道也是非常有用的概念,它使您创建了一个操作管道,用于按顺序处理数据。您可以这样想:创建一个步骤“管道”,每个步骤在数据中执行一个特定的操作“聚合操作”,这会导致某些特定的数据形状,如您想要的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61186995

复制
相关文章

相似问题

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