关于mongodb数据的复杂查询

时间:2015-12-15 09:37:01

标签: mongodb mongodb-query

我在mongodb中有以下数据:

[
{
_id: '1',
  address: "64th St and 5th Ave, New York, NY 10021, United States",
  location: {
    lat: 40,
    lng: -73
  }
},
{
_id: '2',
  address: "108 Cobb Avenue, Elmsford, NY, Estados Unidos",
  location: {
    lat: 40,
    lng: 65
  }
},
{
_id: '3',
  address: "78 Cobb Avenue, Elmsford, NY, Estados Unidos",
  location: {
    lat: 41,
    lng: -73
  }
}
]

我还需要在集合中搜索以下位置数组:

[
  {latitude: 40, longitude: -73},
{latitude: 55, longitude: -73},

  ]

我希望查询找到的只是带有_id'1'的项目,因为它匹配搜索条件中同一元素的纬度和经度。
我最初想过使用$ in但我需要匹配数组中的两个字段,也考虑过$ elemMatch,但我不确定这是如何适应的。我想把搜索的纬度和经度分成两个独立的数组和在两者上使用$ in然后我可能匹配在单独的查询位置中只适合其中一个的元素(因为它不能保证匹配将在相同的数组位置)。

任何人都有关于如何构建此查询的任何见解,而不是诉诸黑客,例如添加第三个字段,这是两者的串联并使用$ in搜索它?

1 个答案:

答案 0 :(得分:1)

$in效果很好。只需确保字段(latlng)的名称与您的数据相同,并且它们以完全相同的顺序列出。 $in将检查整个location文档是否与传递的数组中的至少一个文档相对应。

db.locations.find({
    location: {
        $in: [
            { lat: 40, lng: -73 },
            { lat: 55, lng: -73 }
        ]
    }
})