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 选项。您对maxDistanceminDistance 的使用是硬性约束(不要显示任何不符合这些条件的结果),而不是排序顺序。 如果我没记错的话,$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 参数

带有位置条件的 MongoDB 分页

MongoDB 对地理空间查询的计数不准确

Yii Emongodocuments 在忽略 maxDistance 的查询附近

MongoDB GeoNear 聚合

Mongodb $near 查询 120 万份文档耗时 6 秒