根据the MongoDB documentation和the 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パイプバンド外れ
此结果。
但是如果我使用正则表达式,对此没有任何建议吗?
[没有办法使collate
与任何正则表达式find
逻辑一起工作,因为正则表达式脚本将覆盖任何collate
定义,而仅使用其内部定义的逻辑,即查找包含半角的字符串仅バンド
。
最简单的方法是在将搜索文本发送到MongoDB客户端之前,添加额外的逻辑,并将文本复制为半角和全角。您可以使用某些现有工具,例如this。
然后使用find
将半角和全角搜索参数都应用于您的$or
条件;
db.mycollection.find({$or: [{"desc":/バンド/}, {"desc":/バンド/}]})
同一期;