如果我在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。
所需的顺序对我来说是一个问题,因为我动态地构建了字典,并且(想要)无法控制键序列化的顺序(恰好是构成错误的键)。
答案 0 :(得分:1)
一般来说,mongodb只检查BsonDocument中的第一个元素是否有特殊命令/查询,我想是出于性能原因。有人已经在SERVER-1990
报告了此问题答案 1 :(得分:1)
$near
- 查询。
在Python中,这是通过将字典转换为SON来完成的,如下所示:
from pymongo.son import SON
s = SON({'$near': [50, 50]})
s['$maxDistance'] = 0.27
db.users.find({'geoloc': s})