mongodb - 是否可以展平 MongoDB 结果查询?

我的 MongoDB 集合中有一个深度嵌套的集合。

当我运行以下查询时:

db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})

我在这里得到这个嵌套结果:

{"data" : {
  "country" : [
    {
      "neighbor" : [
        {
          "name" : "Austria"
        },
        {
          "name" : "Switzerland"
        }
      ]
    },
    {
      "neighbor" : {
        "name" : "Malaysia"
      }
    },
    {
      "neighbor" : [
        {
          "name" : "Costa Rica"
        },
        {
          "name" : "Colombia"
        }
      ]
    }
  ]
}}

现在,这就是我想要的:

['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']

或者这个:

{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}

或其他类似的东西......这可能吗?

最佳答案

你可以使用aggregation的$project & $unwind & $group框架以使结果更接近您的要求。

> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
                         {$unwind:'$a'},
                         {$unwind:'$a'},
                         {$group:{_id:'a',res:{$addToSet:'$a'}}})
  {
    "result" : [
        {
            "_id" : "a",
            "res" : [
                "Colombia",
                "Malaysia",
                "Switzerland",
                "Costa Rica",
                "Austria"
            ]
        }
    ],
    "ok" : 1
}

$unwind 使用了两次,因为名称数组嵌套得很深。只有当 neighbor 属性是一个数组时,它才会起作用。在您的示例中,一个相邻字段(马来西亚)不是数组

https://stackoverflow.com/questions/13281733/

相关文章:

c# - MongoDB 和 C# : Case insensitive search

shell - MongoDB 正在运行但无法使用 shell 连接

windows - 如何在 Windows 中连接到 MongoDB?

node.js - mongo 可以 upsert 数组数据吗?

mongodb - MongoDB 中的 replaceOne() 和 updateOne() 有什

javascript - 如何在 Mongoose 模型中定义方法?

java - 自动配置数据源失败 : 'spring.datasource.url' is not

ubuntu - 为什么我不能启动mongodb

mongodb - 在MongoDB中获取数组的第n个元素

mongodb - mongod.service 启动失败 : Unit mongod. 找不到服务