$regex 和 $concat 在 MongoDB 中的查询

car*_*lli 2 mongoose mongodb

我正在尝试根据用户的姓名搜索用户。我的用户架构如下所示:

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

use*_*814 8

攻击表达式不支持正则表达式查询表达式做。

尝试聚合

在聚合管道中创建一个额外的字段名称,结合名字和姓氏,然后与正则表达式匹配。

const userDocs = await UserModel.aggregate
({$addFields:{
   name:{
    $concat:[
     '$firstName',
     ' ',
     '$lastName',
    ]
  }
}},
{$match:{
   name:new RegExp(`^${text}`, 'i')
}});
Run Code Online (Sandbox Code Playgroud)