我正在尝试根据用户的姓名搜索用户。我的用户架构如下所示:
user: {
firstName: string,
lastName: string,
...
}
Run Code Online (Sandbox Code Playgroud)
我可以很好地运行以下查询:
const userDocs = await UserModel
.find({
$expr: {
$eq: [
{
$concat: [
'$firstName',
' ',
'$lastName',
],
},
'John Doe',
],
},
});
Run Code Online (Sandbox Code Playgroud)
但是我正在尝试运行这样的查询:
const userDocs = await UserModel
.find({
$expr: {
$regex: [
{
$concat: [
'$firstName',
' ',
'$lastName',
],
},
new RegExp(`^${text}`, 'i'),
],
},
});
Run Code Online (Sandbox Code Playgroud)
但是 MongoDB 不支持这一点。
有没有办法$regex与 a一起使用$concat?
攻击表达式不支持正则表达式查询表达式做。
尝试聚合
在聚合管道中创建一个额外的字段名称,结合名字和姓氏,然后与正则表达式匹配。
const userDocs = await UserModel.aggregate
({$addFields:{
name:{
$concat:[
'$firstName',
' ',
'$lastName',
]
}
}},
{$match:{
name:new RegExp(`^${text}`, 'i')
}});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |