使用Pymongo执行不区分大小写的查询

时间:2018-12-11 02:42:55

标签: python mongodb pymongo pymongo-3.x

我正在使用mongo数据库在python中工作。我正在使用pymongo 3.6在多个字段上创建文本索引并执行不区分大小写的搜索,但是遇到了麻烦。 我正在使用

创建文本索引
text_index_name = db_collection.create_index([("name", TEXT),
                                              ("summary", TEXT)],
                                              name = 'text_search_index')

然后我尝试使用以下命令执行不区分大小写的搜索:

name = "SomeTerm"
db_collection.find({"$text":{"$search":{
                     "$regex":re.compile(name, re.IGNORECASE)}},
                   })

这将返回以下错误:

"$search" had the wrong type. Expected string, found object

我尝试通过首先创建不区分大小写的文本索引来使用归类

text_index_name = db.collection.create_index(
                           [("name", TEXT),("summary", TEXT)],
                           collation=Collation(
                                   locale="en",
                                   caseLevel=False,
                                   caseFirst="off",
                                   strength=2,
                                   numericOrdering=True,
                                   alternate="non-ignorable",
                                   maxVariable="space",
                                   backwards=True), 
                            name = 'text_search_index')

但是我得到以下信息:

Index type 'text' does not support collation: 
 { locale: "en", caseLevel: true, caseFirst: "off", strength: 5, 
 numericOrdering: true, alternate: "non-ignorable", maxVariable: 
 "space", normalization: false, backwards: true, version: "57.1" }

我看过其他一些成功使用正则表达式的帖子,但是这些帖子正在单个字段中搜索字符串,例如以下类型:

db_collection.find_one({"summary":re.compile("some_term", re.IGNORECASE)})

这也对我有用,但是我无法在$ search中使用它

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您不能在文本搜索中使用$regex运算符。但是,默认情况下,文本搜索为case-insensitive,因此您可以执行以下操作:

db_collection.find({"$text": {"$search": name}})