首页 > 解决方案 > 在猫鼬中使用多个聚合运算符

问题描述

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

该查询区分大小写,我想使用 $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 之前以及每个字段上都尝试过。

任何帮助,将不胜感激。

标签: node.jsmongodbmongoose

解决方案


$toLower您可以简单地首先使用然后投影数据$match

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

你可以看到它在这里工作

$text综上所述,如果要匹配字符串,您可能应该查看搜索。而且$regex因为它们通常齐头并进。你目前的这种做法johjohn等方面不匹配。


推荐阅读