【发布时间】:2015-11-26 22:43:44
【问题描述】:
我正在尝试从我的集合中查找数据,并根据帖子创建时的位置(loc:) 按距离 geoJSON 点最近到最远的顺序显示。
我已经进入 mongo 控制台并运行了
db.my-collection.createIndex( { loc : "2dsphere" } )
为了确保它们被索引为 2dsphere。
现在,每当我使用 find 命令按上述顺序列出帖子时,只有 $maxDistance 有效,而 $minDistance 对它们的排序方式完全没有影响。代码如下:
return posts.find({
loc:
{ $near :
{
$geometry:{ type:"Point", coordinates:[ lng, lat]},
$maxDistance: maxDistance,
$minDistance: minDistance
}
},
});
}
我相信我已经按照 mongoDB(http://docs.mongodb.org/manual/reference/operator/query/near/) 的描述完成了所有工作,但我似乎遗漏了一些东西。
【问题讨论】:
-
我不明白。如果您尝试订购它们,则需要指定
sort选项。您对maxDistance和minDistance的使用是硬性约束(不要显示任何不符合这些条件的结果),而不是排序顺序。 -
如果我没记错的话,$near 命令会自动对它们进行排序。问题是当它对它们进行排序时,它没有考虑到一个帖子需要的 $minDistance 才能显示出来,所以它们最终都会显示出来。
-
直接在mongodb中执行查询得到同样的结果吗?即,这是流星问题还是 mongo 问题?
-
每当我尝试在 mongo db 控制台中运行命令时,我都会收到此错误“$near requires a point, given { type: \"Point\", coordinates: [100.0, 100.0] }”
-
我不确定是 Meteor 还是 mongo 发生了什么。我认为这可能是 mongo 的问题,因为如果我在代码中编辑最大距离,帖子将会改变(例如 $maxDistance = 0 不会加载任何帖子)但编辑 $minDistance 什么都不做。