【问题标题】:Mongoose find the first nearest locationMongoose 找到第一个最近的位置
【发布时间】: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 地理空间索引并自己计算最近的距离?

【问题讨论】:

    标签: javascript node.js mongodb mongoose geolocation


    【解决方案1】:

    我建议将您的查询分为两部分:

    • 查找最近的文档。
    • 查找副本。

    要查找最近的文档,您可以使用$nearsphere 运算符。

    // you can use callbacks if you want
    let closestQuery =
      Person
        .find({
          loc: {
            $nearsphere: coords
          }
        })
        .limit(1)
        .exec();
    
    closestQuery.then(doc => ...);
    

    那么你只需要通过相同的位置查找即可获取重复项。

    【讨论】:

    • 我试过了,但我的查询需要 4 秒才能搜索一个值,这真的很慢。
    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2011-04-24
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多