在MongoDB的Query中使用$ concat $ regex

时间:2018-03-04 04:10:47

标签: mongodb mongoose

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

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一起使用?

1 个答案:

答案 0 :(得分:4)

攻击表达式不支持regex表达式查询表达式。

尝试汇总

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

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