在猫鼬中使用多个聚合运算符

时间:2019-07-03 01:06:38

标签: node.js mongodb mongoose

我有一个猫鼬查询,使用$或聚合器查看在pram中传递的名称是否与名字或姓氏匹配。

该查询区分大小写,我想使用$ toLower聚合器使其成为不区分大小写的查询。

但是我似乎无法弄清楚如何包含$ toLower运算符。

这是我的代码:

export let findByFirstOrLastName = (req: Request, res: Response) => {
    User.find({$or: [
        {firstName: req.params.name},
        {lastName: req.params.name}
    ]}).exec((err, user) => {
        if(err) {
            res.send(err);
        } else {
            res.send(user);
        }
    })
}

我在$ or之前以及每个字段上都尝试过。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以先使用$toLower然后再使用$match投影数据:

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      firstName: { $toLower: "$firstName" },
      lastName: { $toLower: "$lastName" }
    }
  },
  {
    $match: {
      $or: [
        { firstName: req.params.name },
        { lastName: req.params.name }
      ]
    }
  }
])

您可以看到它working here

话虽如此,如果您要再次匹配字符串,您可能应该看一下$text搜索。还有$regex,因为它们通常是并行的。当前执行此操作的方式与joh等中的john不匹配。