MongoDB的find-$near查询中的参数顺序



如果我在MongoDB shell中执行以下查询,一切都很好:

db.users.find({location: {$near: [52.3, 6.6], $maxDistance: 0.27}})

但是,如果我切换参数的顺序,查询将失败:

db.users.find({location: {$maxDistance: 0.27, $near: [52.3, 6.6]}})

Mongo返回以下错误:

error: {
    "$err" : "geo values have to be numbers: { $maxDistance: 0.27, $near: [ 52.3, 6.6 ] }",
    "code" : 13026
}

显然,查询字典中参数的顺序很重要,这让我觉得很奇怪。有人能解释一下吗?我运行的是MongoDB 2.0.2。

所需的顺序给我带来了一个问题,因为我动态地构建字典,并且(希望)无法控制键的串行顺序(恰好是造成错误的顺序)。

一般情况下,mongodb只检查BsonDocument中的第一个元素是否有特殊的命令/查询,我想是出于性能原因。有人已经在SERVER-1990 上报告了这个问题

显然,Mongo希望某些命令使用有序字典(所谓的SON),比如$near-查询。

在Python中,这是通过将字典强制转换为SON来完成的,如下所示:

from pymongo.son import SON
s = SON({'$near': [50, 50]})
s['$maxDistance'] = 0.27
db.users.find({'geoloc': s})

最新更新