首页 > 解决方案 > 如何获取子数组对象中可用的 ID 列表

问题描述

StackOverflow 社区,我有一个类似于这个家伙的问题 如何仅获取 JSON 对象的 ID 列表?

但我需要使用 MongoDB 查询来完成,因为我需要查询大量数据。

我有 1 个这样的对象:

{ 
"_id": ObjectId(".."),
"data": 
 [

    {
      customId : 22,
      customArr:[
           321,
           123
      ]
    },
    {
      customId : 33,
      customArr:[
           123
      ]
    },
    {
      customId : 22,
      customArr:[
      ]
    }
 ]
}

(ofc 有更多数据,但只有这一点对此很重要) 问题:我不知道如何获取这样的列表:

[ 22, 33 ]

[123, 321]

我需要这些列表来计算我的数据,但我目前完全无法计算任何东西。我不能改变我的结构,因为我已经积累了大量这种格式的数据,它会破坏我的整个应用程序。

我使用的是 MongoDB 3.4,所以所有 3.2 聚合更新都可用,但我无法让它工作。

谁能给我链接我需要阅读才能完成此任务的文档?或者给出我需要的任何关于 MongoDB 函数的提示?

提前感谢您的帮助,如果我找到解决方案,我将发布我的解决方案

标签: mongodbperformancenosqlmongodb-queryaggregation-framework

解决方案


您可以使用以下聚合

db.collection.aggregate([
  { "$project": {
    "customId": { "$setUnion": "$data.customId" },
    "customArr": {
      "$reduce": {
        "input": "$data",
        "initialValue": [],
        "in": { "$setUnion": ["$$this.customArr", "$$value"] }
      }
    }
  }}
])

推荐阅读