python - pymongo - 搜索包含 $ 和运算符的文档集合,不区分大小写

标签 python python-3.x mongodb aggregation-framework pymongo

我正在尝试搜索包含文档的集合,集合如下所示:

[{'description':'Fast and Dangerous',
'colour':'blue',
'make':'ford'},
{'description':'slow and dangerous',
'colour':'red',
'make':'lexus'}]

我正在尝试构建一个搜索查询,该查询将返回包含红色和危险(不区分大小写)的所有文档

我一开始是:

find({"$text": {"$search": "red dangerous"}})

但是,这当然不区分大小写,但它是 OR 而不是 AND。

我已阅读https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and - 但这意味着您必须引用可能包含红色或危险的特定字段,而不是整个文档。解决这个问题的最佳方法是什么?我希望我的代码是专业的,但我觉得我想出的任何 hack 都不会是专业的。有什么指点吗?

最佳答案

您可以使用$meta$sort 的聚合阶段。类似的东西

db.collection.aggregate([
  { "$match": { "$text": { "$search": "red Dangerous" } } },
  { "$addFields": { "score": { "$meta": "textScore" } } },
  { "$sort": { "score": 1 } }
])

文本分数表示文档与搜索词的匹配程度。因此,最匹配的文档将始终位于顶部。

关于python - pymongo - 搜索包含 $ 和运算符的文档集合,不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53249496/

相关文章:

python - Python 中的示例函数 : counting words

python - 如何通过多处理在单独的 Python 进程中使用用 Cython 包装的外部 C 库?

python - 制作一组元组的有效方法,其中元组的顺序无关紧要

ruby-on-rails - URL 缩短器如何大规模工作(例如 t.co 在 Twitter 的情况下)

javascript - jQuery:如何将 UTC 中的服务器时间转换为 Web 浏览器的本地时间?

node.js - Ubuntu 12.04 中的 Socket.io 错误

python - 修复 'new enumerations must be created as'

Julia 中的 Python None 和 numpy 命令

python - 在枚举中显示可选成员

python 3 : how to check if an object is a function?