使用排序规则和正则表达式比较 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":/バンド/}]})
同样的问题;
根据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":/バンド/}]})
同样的问题;