【问题标题】:MongoDB query to find a value from multiple nested json filesMongoDB查询从多个嵌套的json文件中查找一个值
【发布时间】:2015-04-19 06:52:43
【问题描述】:

我有 500 个以下格式的 json 文件(格式相同。只是数据不同)。我只需要所有这些文件中的城市名称。谁能帮我查询。

示例:从以下文件中,我需要输出 San Diego, Newnan, Louisville。

{
"clinical_study":{
 "location": [
  {
    "facility": {
      "address": {
        "city": "San Diego",
        "country": "United States"
      }
    }
  },
  {
    "facility": {
      "address": {
        "city": "Newnan",
        "country": "United States"
      }
    }
  },
  {
    "facility": {
      "address": {
        "city": "Louisville",
        "country": "United States"
      }
    }
  }
]
}
}

【问题讨论】:

    标签: arrays json mongodb nested mongodb-query


    【解决方案1】:

    我对 MongoDB 有点陌生,但听起来您不需要查询城市名称。听起来您已经查询了位置列表,所以您需要做的就是正确循环以从每个返回的位置获取城市。

    类似这样的:

    // Assume here that clinical is the object in your question
    var locations = clinical.clinical_study.locations;
    var cityList = [];
    
    for (var i = 0; i < locations.length ; i++ ) {
        cityList[i] = locations.facility.address.city;
    }
    

    这至少是一种幼稚的方法。我不确定你如何在数据库查询本身中做到这一点(我熟悉 express 模块 Mongoose,我认为它不允许这样做。如果我错了,请纠正我。)

    【讨论】:

    • 能否提供相关查询
    • @Vamshi 您还没有解释要查询的内容。您只是说,鉴于有问题的对象,您如何获得城市。如果您已经拥有相关对象,则您已经执行了查询。您尚未指定查询给定对象的条件。
    【解决方案2】:

    目前还不清楚你想要什么。但无论我了解什么,您都只需要来自给定样本收集结构的城市名称。你可以简单地使用Mongo Aggregation

    这是获取城市的查询:

    db.collectionName.aggregate({
          $unwind: "$clinical_study.location"
        }, {
        $project: {
          "_id": 0,
          city: '$clinical_study.location.facility.address.city'
        }
    })
    

    【讨论】:

    • 我收到一条错误消息,提示 $unwind 字段路径 '$clinical_study.location' 末尾的值必须是一个数组,但它是一个对象。
    • 这里数组 Location 是展开而不是 clinical_study。您是否在示例数据中提供了正确的结构?我正在使用 mongo 3.0 并且正在为我工​​作。
    猜你喜欢
    • 2018-09-04
    • 2020-02-26
    • 2015-02-05
    • 1970-01-01
    • 2016-08-21
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多