【问题标题】:MongoDB $maxDistance is working but $minDistance will notMongoDB $maxDistance 正在工作,但 $minDistance 不会
【发布时间】: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 什么都不做。

标签: mongodb meteor


【解决方案1】:

为了让 $minDistance 和 $maxDistance 都能正常工作,我必须在代码中添加以下行:

Collection._ensureIndex({'loc':'2dsphere'});

【讨论】:

  • @lsaac 即使索引了“2dsphere”,我仍然没有得到结果?
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 2017-07-18
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2021-08-09
  • 2015-12-08
  • 1970-01-01
相关资源
最近更新 更多