我使用$near
命令返回坐标附近的城市列表。
Villages.find({loc: {$near: [lat,long], $maxDistance: 2}},
{fields: {name: 1, _id: 0}},
{limit: 1}
);
这很有效,但我遇到的问题是你可以靠近大城市的边缘,但在技术上仍然比下一个邻近城市的中心更接近你所在的城市。因此我和#39; d喜欢根据人口对结果进行加权(只有数据我必须猜测一个城市是否很大)。由于我不相信我可以使用$near
执行此操作,因此我需要手动(通过粗体或其他方式)选择最近的城市。我该怎么做呢?
答案 0 :(得分:1)
如果这样有效,那就好了。您的代码中存在轻微的技术错误,可能是负责的:
Villages.find({loc: {$near: [long,lat], $maxDistance: 2}},
{fields: {name: 1, _id: 0}},
{limit: 1}
);
Mongo使用long, lat
而非lat, long
。值得一提的是,这种模式不赞成使用:
loc: { $near : {
$geometry : [long, lat],
$maxDistance : 2
} }
loc
看起来像这样:
loc: {
type : "Point",
coordinates : [ long , lat ]
}
请务必同时为它们编制索引:MyCollection._ensureIndex({"loc" : "2dsphere"});