如何在MongoDB中访问名称为动态的对象内的键

时间:2018-06-28 03:16:30

标签: mongodb

{
  "_id": "1",
  "Continent": "Asia",
  "Countries": {
    "South Korea": {
      "GDP": 80,
      "HGI": 60,
      "FX": 10
    },
    "India": {
      "GDP": 75,
      "HGI": 112,
      "FX": 28
    },
    "Singapore": {
      "GDP": 34,
      "HGI": 60,
      "FX": 0
    }
  }
}

我有上面的JSON。需要访问GDP和HGI字段。但是国家名称随大陆而异。如何创建一个可以访问GDP和HGI的查询?是否有可能在对象内引用键的位置? 我不能将其转换为数组。只需要从这种格式中提取数据。

谢谢!!!!

2 个答案:

答案 0 :(得分:1)

您可以使用$objectToArray运算符

来实现

查询如下:

db.collection.aggregate([
  {
    "$project": {
      "countries": {
        "$objectToArray": "$Countries"
      }
    }
  },
  {
    "$project": {
      "countries.v.GDP": 1
    }
  }
])

结果:

[
  {
    "_id": "1",
    "countries": [
      {
        "v": {
          "GDP": 80
        }
      },
      {
        "v": {
          "GDP": 75
        }
      },
      {
        "v": {
          "GDP": 34
        }
      }
    ]
  }
]

您可以在这里尝试:mongoplayground.net/p/1ODRczeV-0S

答案 1 :(得分:0)

一旦您获得了一个大洲的所有国家/地区,就可以使用一个小技巧即处理数据了。

 {
   "_id": "1",
   "Continent": "Asia",
   "Countries": {
     "South Korea": {
       "GDP": 80,
       "HGI": 60,
       "FX": 10
     },
     "India": {
       "GDP": 75,
       "HGI": 112,
       "FX": 28
     },
     "Singapore": {
       "GDP": 34,
       "HGI": 60,
       "FX": 0
     }
   }
 }

从上面您可以轻松获得国家。现在,

Object.keys(data.Countries);

这将返回数组中的所有国家/地区,例如[“韩国”,“印度”,“新加坡”]。现在,您可以通过访问这些键轻松访问所有特定于国家/地区的数据。