在具有嵌套文档和嵌套atrrays mongodb的文档中搜索

时间:2019-10-04 15:51:18

标签: mongodb nested

我的文档具有以下结构:

{
  "address":{
    "building":"1007",
    "coord":[
      -73.856077,
      40.848447
    ],
    "street":"Morris Park Ave",
    "zipcode":"10462"
  },
  "borough":"Bronx",
  "cuisine":"Bakery",
  "grades":[
    {
      "date":{
        "$date":1393804800000
      },
      "grade":"A",
      "score":2
    },
    {
      "date":{
        "$date":1378857600000
      },
      "grade":"A",
      "score":6
    },
    {
      "date":{
        "$date":1358985600000
      },
      "grade":"A",
      "score":10
    },
    {
      "date":{
        "$date":1322006400000
      },
      "grade":"A",
      "score":9
    },
    {
      "date":{
        "$date":1299715200000
      },
      "grade":"B",
      "score":14
    }
  ],
  "name":"Morris Park Bake Shop",
  "restaurant_id":"30075445"
}

我需要搜索文档地址中数组坐标首项小于-95.754168的文档

试图做

db.colect1.find({address: {coord:{$lt:-95.754168}}},{"address.coord":1})

或这个

db.colect1.find({"address.coord.1":{$lt:-95.754168}},{"address.coord":1})

(colect1是存储文档的集合)没有成功。特别是第二种选择让我感到惊讶,为什么它不起作用?

一个优雅的解决方案是

db.colect1.find({"address.coord":{$elemMatch: { $lt:-95.754168, $ne: 1000000 }}},{"address.coord":1})

但是并不是最佳选择,因为我只想查询coord数组中的第一个元素。

我对此表示感谢

1 个答案:

答案 0 :(得分:0)

以下查询将为我们提供预期的输出:

db.collection.find(
    {
        $where: function(){
            return this.address.coord[0] < -95.754168
        }
    },
    {
        "address.coord":1
    }
).pretty()

对于Mongo版本:3.4.2

{{1}}