我在 PyMongo 游标文档中有类似的代码 https://api.mongodb.org/python/current/api/pymongo/cursor.html
这是来自文档页面的代码。
cursor = db.test.find(
{'$text': {'$search': 'some words'}},
{'score': {'$meta': 'textScore'}})
当我使用 Windows Python 2.7 PyMongo 3.0.3 和 3.0.2 运行此代码时,我收到以下 MongoDB 错误“OperationFailure:数据库错误:无法规范化查询:BadValue 未知运算符:$meta”。 查看原因,如果我使用 MongoDB 客户端并在“$text”之前放置“{'score':{'$meta':'textScore'}}”,我能够重现此错误。
db.test.find({ score: { $meta: "textScore" } }, { $text: { $search: "some words" }})
回到 Python 中,如果我打印带有查询键的字典,我首先看到“score”键,然后看到“$text”键。 我想这会导致 PyMongo 形成错误的查询并随后导致查找方法出错。
是否有解决此问题的方法?
谢谢
最佳答案
你不需要解决你的第一个例子应该工作我用 pymongo 3.0.3 测试它并且工作只是找到。
db.test.find({'$text': {'$search': 'some words'}}, {'score': {'$meta': 'textScore'}})
现在,第二个示例失败了,因为您切换了两个位置参数的位置。
在这里讨论 Python 的无序字典毫无意义,因为我们讨论的是具有单个 键的两个不同的字典。 当我们谈论两个词典时,我不明白你怎么能先得到“score”键,然后得到“$text”键,除非你把两者结合起来,这是错误的,你的第一次尝试不是您在此处粘贴的内容。
(*) 在使用 pymongo 的情况下,您需要在一些复杂的查询中使用有序字典,在这种情况下,您应该使用 BSON 对象 (see here) .但在你的情况下你不需要这个。
关于python - 如何解决 PyMongo 在查询中首先放置 MongoDB 分数并导致错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556126/