当MongoDB客户机返回正确的结果时,PyMongo返回一个空的结果集

2024-09-25 10:18:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的MongoDB集合,我正在使用Python脚本中的PyMongo访问它。在

我使用字典在Python中过滤查询:

{ "$and" : [
    { "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
    { "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } }
    ]
}

这将返回正确的结果。但是,我希望将过滤器扩展为:

^{pr2}$

这将返回一个空的结果集。现在,当我在我的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)

Tags: andnamemongodbfindfilterquerycollectionrunner