Mongoose 找到第一个最近的位置
Posted
技术标签:
【中文标题】Mongoose 找到第一个最近的位置【英文标题】:Mongoose find the first nearest location 【发布时间】:2016-12-15 14:28:24 【问题描述】:在我的 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
,因为我需要获取第一个位置的所有重复数据。
例如如果找到的第一个坐标是 -5.95001220703125, 51.5499954223633
并且我有 10 次这个位置,我需要获取所有具有这个位置的文档。
所以只用一次 Mongoose Query 就可以做到这一点吗?或者我不应该在我的应用程序中使用 MongoDB 地理空间索引并自己计算最近的距离?
【问题讨论】:
【参考方案1】:我建议将您的查询分为两部分:
查找最近的文档。 查找副本。要查找最近的文档,您可以使用$nearsphere
运算符。
// you can use callbacks if you want
let closestQuery =
Person
.find(
loc:
$nearsphere: coords
)
.limit(1)
.exec();
closestQuery.then(doc => ...);
那么你只需要通过相同的位置查找即可获取重复项。
【讨论】:
我试过了,但我的查询需要 4 秒才能搜索一个值,这真的很慢。以上是关于Mongoose 找到第一个最近的位置的主要内容,如果未能解决你的问题,请参考以下文章