我正在尝试根据用户的名字搜索用户。我的用户架构如下所示:
user: {
firstName: string,
lastName: string,
...
}
我可以运行以下查询:
const userDocs = await UserModel
.find({
$expr: {
$eq: [
{
$concat: [
'$firstName',
' ',
'$lastName',
],
},
'John Doe',
],
},
});
但是我正在尝试运行这样的查询:
const userDocs = await UserModel
.find({
$expr: {
$regex: [
{
$concat: [
'$firstName',
' ',
'$lastName',
],
},
new RegExp(`^${text}`, 'i'),
],
},
});
然而,MongoDB不支持此功能。
有没有办法将$regex
与$concat
一起使用?
答案 0 :(得分:4)
攻击表达式不支持regex表达式查询表达式。
尝试汇总
在聚合管道中创建一个额外的字段名称,其中包含名字和姓氏,然后匹配正则表达式。
const userDocs = await UserModel.aggregate
({$addFields:{
name:{
$concat:[
'$firstName',
' ',
'$lastName',
]
}
}},
{$match:{
name:new RegExp(`^${text}`, 'i')
}});