我在 Python 脚本中使用PyMongo
访问了一个简单的 MongoDB 集合。
我正在使用字典 Python 过滤查询:
{ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } }
]
}
这会返回正确的结果。但是,我想将过滤器扩展为:
{ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } },
{ "summary.dist" : "1" }
]
}
这将返回一个空结果集。现在,当我在 MongoDB 客户端中使用:
执行相同的查询时db.race_results.find({ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } },
{ "summary.dist": "1" }
]
})
按预期正确返回结果。
我认为,作为查询过滤器传递的 Python 字典与我的 MongoDB 客户端上执行的js
代码之间没有任何区别。
有谁看到可能存在差异的地方?我在这里不知所措。
更新
以下是我的数据库中的示例记录: https://gist.github.com/brspurri/8cefcd20a7f995145a81
更新2: 用于执行查询的Python代码:
runner = "Jailhouse King"
opponent = "Tyrone Haji"
query_filter = {"$and": [
{"bettinginterests": {"$elemMatch": {"runner.name": runner}}},
{"bettinginterests": {"$elemMatch": {"runner.name": opponent}}},
{ "summary.dist" : "1" }
]
}
try:
collection = db.databases['race_results']
entities = None
if not query_filter:
entities = collection.find().sort([("date", -1)])
else:
entities = collection.find(query_filter).sort([("date", -1)])
except BaseException, e:
print('An error occured in query: %s\n' % e)
答案 0 :(得分:1)
这条线可能是罪魁祸首。
collection = db.databases['race_results']
如果db
是您的数据库,那么您做错了。它应该是
collection = db['race_results']