我的情况:我有一个集合与地址在我的数据库,我想显示这些在谷歌地图作为标记,但只有在coördinates内显示的地图,只有当地址id是在我的列表与id,应该显示。
我有两个独立的查询,它们各自工作得很好。
// Find within ID's
db.addresses.find({
_id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] }
})
这个查询如预期的那样返回2个具有给定id的地址。
// Find within area
db.addresses.find({
location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } }
})
该查询返回大约15个地址,其中还包括ID1的地址,该地址在给定的coördinates内。
我想将这2个查询合并为1,它只返回在给定coördinates内具有给定ID的地址。
我试了如下:
// Find within area within ids
db.addresses.find({
$and : [
{location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } } },
{_id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] } }
]
})
不返回任何行。我在等1个地址,ID1的那个。
我试着在谷歌上搜索,但我似乎找不到如何将这两个查询结合起来。
谁能告诉我我做错了什么,或者我如何才能实现我的目标?
无需使用$和操作符。不能在$和操作符中使用地理空间查询。请检查此问题。试试这个:
db.addresses.find({
location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } } ,
_id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] }
})
不确定上述问题是否会影响我们在这里使用的implicit and
。