You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现MongoDB标题不区分大小写搜索功能求助

实现MongoDB标题字段不区分大小写搜索

方法1:使用正则表达式(适合小数据集)

直接在$match阶段用$regex并指定i选项(开启不区分大小写)即可,为避免搜索内容里的正则特殊字符干扰,建议先转义:

@cross_origin(origin='*',headers=['Content-Type','Authorization'])
def search_by_title():
    import re
    title = request.args.get('title')
    # 转义正则特殊字符,防止搜索逻辑出错
    escaped_title = re.escape(title)
    
    pipeline = [ 
        { "$match" : { "title" : { "$regex": escaped_title, "$options": "i" }}},
        { "$project" : {"title" : 1, "movie" : 1, "_id" : 1}}
    ]
    
    data_to_return = []
    for movie in movies.aggregate(pipeline):
        movie['_id'] = str(movie['_id'])
        data_to_return.append(movie)
    return make_response(jsonify(data_to_return), 200)

方法2:创建文本索引(适合大数据量,性能更优)

如果数据集较大,正则搜索的性能会受限,推荐给title字段创建文本索引,这种方式天然支持不区分大小写,且搜索效率更高:

首先执行一次索引创建操作(MongoDB Shell或Python中都可):

# 在Python中创建文本索引
movies.create_index([("title", "text")])

然后修改搜索逻辑:

@cross_origin(origin='*',headers=['Content-Type','Authorization'])
def search_by_title():
    title = request.args.get('title')
    
    pipeline = [ 
        { "$match" : { "$text": { "$search": title }}},
        { "$project" : {"title" : 1, "movie" : 1, "_id" : 1}}
    ]
    
    data_to_return = []
    for movie in movies.aggregate(pipeline):
        movie['_id'] = str(movie['_id'])
        data_to_return.append(movie)
    return make_response(jsonify(data_to_return), 200)

文本索引还支持多词匹配,适合更复杂的搜索场景。

内容的提问来源于stack exchange,提问作者Claire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:05:19