MongoDB $maxDistance 正在工作,但 $minDistance 不会
Posted
技术标签:
【中文标题】MongoDB $maxDistance 正在工作,但 $minDistance 不会【英文标题】:MongoDB $maxDistance is working but $minDistance will not 【发布时间】: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 什么都不做。
【参考方案1】:
为了让 $minDistance 和 $maxDistance 都能正常工作,我必须在代码中添加以下行:
Collection._ensureIndex('loc':'2dsphere');
【讨论】:
@lsaac 即使索引了“2dsphere”,我仍然没有得到结果?以上是关于MongoDB $maxDistance 正在工作,但 $minDistance 不会的主要内容,如果未能解决你的问题,请参考以下文章
在 mongodb 地理位置查询中使用对象属性作为 $maxDistance 参数