python - 如何解决 PyMongo 在查询中首先放置 MongoDB 分数并导致错误的问题

标签 python mongodb

我在 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/

相关文章:

python - 通过 Keras 模型可视化地 block 决策边界

Python:在计算机之间发送大文件

mongodb - Elasticsearch-更新非索引字段

mongodb - 使用 mongo C# 驱动程序创建自定义 ID

node.js - 如何查询 mongoDB 以获取其 _id 值与数组中的一个 _id 值匹配的文档?

python - 操作长串位的数据结构

python - 如何在 Python 中的 Google Cloud Function 中运行子进程

python - python 中的selenium - 一次超时会导致所有后续请求超时

mongodb - 更新 nedb 中的数组元素

mongodb - 更新 Mongodb 文档的单个列表项