在我的MongoDB数据库中,我有大量的位置(坐标可以重复)。我想要获得第一个最近的位置(经度/纬度)。在我的模型中,我有这个:
var mySchema = new Schema({
loc:{
type : [Number],
index: '2d'
},
...
});
我看到MongoDB实现$near
方法来计算最近的位置。然后我尝试了这个
Model.find({loc: {$near:[1.4072964, 7.826107], $maxDistance: 1} }, function(err, result){
result.forEach(function(doc){
console.log(doc.loc)
})
});
问题是它将返回距离此点最近的所有位置约1米。但我不需要最大距离我只想找到第一个最近的位置。
我不能使用findOne
因为我需要为第一个位置获取所有重复数据。
E.g。如果找到的第一个坐标是-5.95001220703125, 51.5499954223633
并且我有10次这个位置,我需要获得这些位置的所有文档。
所以只用一次Mongoose Query就可以做到这一点吗?或者我不应该使用MongoDB地理空间索引并在我的应用程序中计算自己的最近距离?
答案 0 :(得分:0)
我建议将您的查询分为两部分:
要查找最近的文档,您可以使用$nearsphere
运算符。
// you can use callbacks if you want
let closestQuery =
Person
.find({
loc: {
$nearsphere: coords
}
})
.limit(1)
.exec();
closestQuery.then(doc => ...);
然后您只需要在同一位置找到以获取重复项。