Regex 土耳其文字与猫鼬
我正试图用一个词在一个集合中搜索。所以我有这样的记录:Regex 土耳其文字与猫鼬,regex,mongodb,mongoose,Regex,Mongodb,Mongoose,我正试图用一个词在一个集合中搜索。所以我有这样的记录: { "_id" : ObjectId("5ec2e9d0543e75377e9f3981"), "text" : "işlemci", "question" : ObjectId("5ec2c3f36700e13311592917"), "createdAt" : ISODate("2020-05-18T20:02:24.641+0000"), "updatedAt" : ISODate("
{
"_id" : ObjectId("5ec2e9d0543e75377e9f3981"),
"text" : "işlemci",
"question" : ObjectId("5ec2c3f36700e13311592917"),
"createdAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"updatedAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"__v" : NumberInt(0)
}
let doc = await Model.find({ text: 'islemci' });
我使用以下查询查找该条目:
var answer = "islemci"
const answerRegex = new RegExp(answer, 'i');
const answers = await Answer
.find({
text: answerRegex,
question: questionId
})
.populate('question', 'text -_id')
.select('text question');
它找不到任何记录,因为我们将“islemci
”值传递给了answer
变量。如果我尝试使用“işlemci
”,它会找到条目
我怎么能在搜索时忽略土耳其语字符
土耳其语字符:用于字符串比较的特定于语言的规则可以使用。基本上,在您的情况下,您可以将
en_US
用于locale
并指定strength
1
,这将忽略任何非英语字符
1初级比较。排序规则只执行基本字符的比较,而忽略其他差异,如变音符号和大小写
在mongoose中,可以在架构级别指定排序规则:
const yourSchema = new Schema(
{
text: String,
question: Schema.Types.ObjectId,
createdAt: Date,
updatedAt: Date,
},
{ collation: { locale: 'en_US', strength: 1 } }
);
无论何时调用。按如下方式查找:
{
"_id" : ObjectId("5ec2e9d0543e75377e9f3981"),
"text" : "işlemci",
"question" : ObjectId("5ec2c3f36700e13311592917"),
"createdAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"updatedAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"__v" : NumberInt(0)
}
let doc = await Model.find({ text: 'islemci' });
mongoose将运行以下查询:
db.col.find({ text: 'islemci' }, { collation: { locale: 'tr', strength: 1 }, projection: {} })
它适用于平等比较,但不幸的是不适用于:
$regex实现不支持排序规则
用于字符串比较的特定于语言的规则可以使用来处理。基本上,在您的情况下,您可以将en_US
用于locale
并指定strength
1
,这将忽略任何非英语字符
1初级比较。排序规则只执行基本字符的比较,而忽略其他差异,如变音符号和大小写
在mongoose中,可以在架构级别指定排序规则:
const yourSchema = new Schema(
{
text: String,
question: Schema.Types.ObjectId,
createdAt: Date,
updatedAt: Date,
},
{ collation: { locale: 'en_US', strength: 1 } }
);
无论何时调用。按如下方式查找:
{
"_id" : ObjectId("5ec2e9d0543e75377e9f3981"),
"text" : "işlemci",
"question" : ObjectId("5ec2c3f36700e13311592917"),
"createdAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"updatedAt" : ISODate("2020-05-18T20:02:24.641+0000"),
"__v" : NumberInt(0)
}
let doc = await Model.find({ text: 'islemci' });
mongoose将运行以下查询:
db.col.find({ text: 'islemci' }, { collation: { locale: 'tr', strength: 1 }, projection: {} })
它适用于平等比较,但不幸的是不适用于:
$regex实现不支持排序规则