我有这样一个集合:
origin: {
location : {
type: String,
coordinates: [lgnt,lat]
}
},
destination: {
location : {
type: String,
coordinates: [lgnt,lat]
}
}
在 location.origin 和 location.destination 上创建一个索引:'2dsphere'。
然后我得到了另一个“from”点和“to”点,并尝试获取数据库中满足以下条件的所有文档:
- 起点在“from”点附近
- 终点在“to”点附近。
对于其中的一个或另一个,都可以:
db.find({
'origin.location': {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [from.lng, from.lat]
},
$maxDistance: 10
}
}
})
然而在文档中,写道我不能使用两个$near查询。我尝试了一些方法,比如:
db.find({
'origin.location': {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [from.lng, from.lat]
},
$maxDistance: 10
}
},
'destination.location': {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [to.lng, to.lat]
},
$maxDistance: 10
}
}
});
使用了两个 $near/$nearSphere 无法正常工作。 因此,我尝试使用 。
$and : [
$near: ...,
$near: ...
]
这也不起作用。我尝试使用聚合,但是不能在$match
中使用$near
。你会怎么做?
- 也许我错过了什么?
- 我可以使用
LineString
并尝试查询“相似的”LineString
,但如何实现呢? - 目前的解决方案是进行两个查询,一个查询起点,一个查询终点,然后在客户端交集两个结果数组,以获得所需结果,但这需要进行两个查询。
P.S:我也尝试过:
var origines = db.find({
'origin.location': {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [from.lng, from.lat]
},
$maxDistance: 10
}
}
}, {
_id: 1
})
origines = origines.map(function(elem) {
return elem._id;
});
db.find({
$and: [{
_id: {
$in: origines
}
}, {
'destination.location': {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [to.lng, to.lat]
},
$maxDistance: 10
}
}
}]
});
但是没有