我需要搜索框中的所有点。所以我在mongoDB 中使用以下查询
db.places.find({
"loc" : {
"$geoWithin" : {
"$box": [
[ 0 , 0 ] ,
[ 100 , 100 ]
]
}
}
})
现在我有多个框要在其中搜索,我想获得任何框中的所有点。我想要像一样的东西
db.places.find({
"loc": {
"$geoWithin": {
"$box":[ [ 0 , 0 ], [ 25 , 25 ] ],
[ [ 40 , 40 ] , [ 75 , 75 ] ],
[ [ 90 , 90 ] , [ 100 , 100 ] ]
}
}
})
我不能像使用$or
那样使用短路评估。我也不能使用聚合,因为聚集中只支持$geonear
。我不想为每个框打一个单独的查询。请提出建议。
有一些"快捷方式"类型运算符可用于预定义的"地理"类型查询,例如$box
。但对于任何更高级的东西,您实际上都希望正式声明GeoJSON结构,并使用$geometry
运算符:
因此,如果你考虑以下文件:
{ "loc" : { "type" : "Point", "coordinates" : [ 3, 6 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 9, 12 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 45, 45 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 30, 30 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 76, 76 ] } }
然后进行以下查询:
db.geo.find({
"loc": {
"$geoWithin": {
"$geometry":{
"type": "MultiPolygon",
"coordinates": [
[[ [ 0, 0 ], [ 0, 25 ], [ 25, 25 ], [ 25, 0 ], [ 0, 0 ] ]],
[[ [ 40, 40 ], [ 40, 75 ], [ 75, 75 ], [ 75, 40 ], [ 40, 40 ] ]],
[[ [ 80, 80 ], [ 80, 90 ], [ 90, 90 ], [ 90, 80 ], [ 80, 80 ] ]]
]
}
}
}
})
您将得到返回的结果:
{ "loc" : { "type" : "Point", "coordinates" : [ 3, 6 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 9, 12 ] } }
{ "loc" : { "type" : "Point", "coordinates" : [ 45, 45 ] } }
因此,这种类型的查询需要对GeoJSON几何结构的完全支持。
这肯定适用于MongoDB 2.6,2.4.10也应该如此。在这些版本中,扩展的GeoJSON类型可用于索引,但(未尝试)可能在早期的2.4版本中用作查询表单。