我正在尝试搜索包含文档的集合,集合如下所示:
[{'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 都不会是专业的。有什么指点吗?
最佳答案
db.collection.aggregate([
{ "$match": { "$text": { "$search": "red Dangerous" } } },
{ "$addFields": { "score": { "$meta": "textScore" } } },
{ "$sort": { "score": 1 } }
])
文本分数表示文档与搜索词的匹配程度。因此,最匹配的文档将始终位于顶部。
关于python - pymongo - 搜索包含 $ 和运算符的文档集合,不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53249496/