鉴于以下文件:
{
_id: 'foo'
locations: [
{
lat: 1,
lon: 2,
type: 'home'
},
{
lat: 10,
lon: 20,
type: 'office'
}
]
}
{
_id: 'bar'
locations: [
{
lat: 10,
lon: 20,
type: 'home'
},
{
lat: 1,
lon: 2,
type: 'office'
}
]
}
是否可以在具有特定类型的位置附近找到所有文档?
例如,查询:
db.objects.find({locations: {$near: {lat: 1, lon: 2}, $maxDistance: 1}, 'locations.type': 'home'})
返回foo和bar,因为它们都有一个类型为'home'的位置和一个靠近[1,2]的位置
我想让查询做的就是找到foo,因为它的家位置就在附近[1,2]
答案 0 :(得分:0)
您可以考虑更改架构。而不是具有位置数组的单个文档,而是考虑多个文档,每个文档表示具有类型名称的单个位置。
您需要在此处执行的查询类型需要$ elemMatch以保证在同一数组元素上满足您的两个条件 - 为此我们使用elemMatch。不幸的是,它不适用于地理空间查询 - 至少目前无法构建它。有一个出色的Jira ticket可以让它发挥作用。