猫鼬找到第一个最近的位置

时间:2016-12-15 14:28:25

标签: javascript node.js mongodb mongoose geolocation

在我的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地理空间索引并在我的应用程序中计算自己的最近距离?

1 个答案:

答案 0 :(得分:0)

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

  • 找到最接近的文件。
  • 查找重复项。

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

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

closestQuery.then(doc => ...);

然后您只需要在同一位置找到以获取重复项。