使用归类和正则表达式比较mongodb中的全角和半角日文字符

问题描述 投票:1回答:1

根据the MongoDB documentationthe ICU documentation,应该可以利用collation忽略日语文本中的全角和半角差异。

我尝试了以下;

{ locale: "ja", caseLevel:true, strength:1} 

具有不同的强度,但没有一个起作用。

db.getCollection('mycollection')
        .find({"desc":/バンド/})
        .collation({ locale: "ja", caseLevel:true, strength:1})

此查询无法从以下文档获得结果;

{
    "desc": "*EGRパイプバンド外れ"
}

更新

在MongoDB中,正则表达式无法应用排序规则的原因,因此,如果我使用某些匹配项来执行查询,则结果是完美的:

db.getCollection('mycollection')
        .find({"desc":"*EGRパイプバンド外れ???"})
        .collation({ locale: "ja", caseLevel:true, strength:1})

此查询将返回*EGRパイプバンド外れ此结果。

但是如果我使用正则表达式,对此没有任何建议吗?

regex mongodb encoding collation
1个回答
0
投票

[没有办法使collate与任何正则表达式find逻辑一起工作,因为正则表达式脚本将覆盖任何collate定义,而仅使用其内部定义的逻辑,即查找包含半角的字符串仅バンド

最简单的方法是在将搜索文本发送到MongoDB客户端之前,添加额外的逻辑,并将文本复制为半角和全角。您可以使用某些现有工具,例如this

然后使用find将半角和全角搜索参数都应用于您的$or条件;

db.mycollection.find({$or: [{"desc":/バンド/}, {"desc":/バンド/}]}) 

同一期;

© www.soinside.com 2019 - 2024. All rights reserved.