我在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搜索它?
答案 0 :(得分:1)
$in
效果很好。只需确保字段(lat
和lng
)的名称与您的数据相同,并且它们以完全相同的顺序列出。 $in
将检查整个location
文档是否与传递的数组中的至少一个文档相对应。
db.locations.find({
location: {
$in: [
{ lat: 40, lng: -73 },
{ lat: 55, lng: -73 }
]
}
})