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

时间:2012-03-03 08:00:14

标签: mongodb

如果我在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。

所需的顺序对我来说是一个问题,因为我动态地构建了字典,并且(想要)无法控制键序列化的顺序(恰好是构成错误的键)。

2 个答案:

答案 0 :(得分:1)

一般来说,mongodb只检查BsonDocument中的第一个元素是否有特殊命令/查询,我想是出于性能原因。有人已经在SERVER-1990

报告了此问题

答案 1 :(得分:1)

很明显,Mongo希望某些命令有序字典(所谓的SON),例如$near - 查询。

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

from pymongo.son import SON

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