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 找到第一个最近的位置的主要内容,如果未能解决你的问题,请参考以下文章

解构第一个 Array 项或如何强制 Mongoose 返回 Object 而不是 1-item Array

mongoose.model第三个参数的问题

Mongoose / MongoDB:获得倒数第二个文档

按地理位置靠近我的人

为啥我在循环中的 Mongoose 查询只返回第一个结果?

如何比较位置