我已在集合loc
中为字段c
定义了“2dsphere”索引:
db.c.createIndex( { loc : "2dsphere" } )
我在c
集合中有以下文档。它是[40,5]到[41,6]的一行:
db.c.insert({"name": "myLine", "loc": { type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }})
使用$near
运算符,以[40,5]为中心且距离非常小的邻近查询匹配(即返回文档):
db.c.find({
loc: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ 40, 5 ]
},
$maxDistance: 0.0001,
}
}
})
对于该行中的另一点也是如此:
db.c.find({
loc: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ 41, 6 ]
},
$maxDistance: 0.0001,
}
}
})
因此,似乎$near
具有“相交”语义:如果几何中的某些点位于邻近区域内,则查询匹配。
但是,我想知道是否某种方式指定几何的所有点都必须在邻近区域内。换句话说,类似于$geoWithin
运算符之一的语义(据我所知,只有当查询可以表示为GJSON时才可以使用,即不适合圆圈)。
在查看geo spacial queries section in the MongoDB documentation之后,我还没有找到答案......
编辑:有人提到此问题可能与this other重复。但是,我不这么认为,因为提到的问题是询问$ near / $ geoNear / $ geoWithin运算符,而我要求解决邻近查询中的“语义内”问题(无论是否其中一个操作符或其他机制用于解决问题)。另外,引用的问题是关于MultiPoint,而我的例子是基于LineString(尽管这可能是次要方面)。