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

Compare fullwidth and halfwidth japanese characters in mongodb by using collation and regex

根据the MongoDB documentation and the ICU documentation,利用collation.

应该可以忽略日语文本中的全角和半角差异

我尝试了以下方法;

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

强度不同,但其中 none 有效。

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})

这个查询会return*EGRパイプバンド外れ这个结果。

但如果我使用正则表达式就不行,有什么建议吗?

无法使 collate 与任何正则表达式 find 逻辑一起工作,因为正则表达式脚本将覆盖任何 collate 定义,并且仅使用其自身定义的逻辑,即找到任何仅包含半角 バンド 的字符串。

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

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

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

同样的问题;