【问题标题】:using multiple aggregate operators in mongoose [duplicate]在猫鼬中使用多个聚合运算符[重复]
【发布时间】:2019-07-03 09:23:54
【问题描述】:

我有一个 mongoose 查询,它使用 $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.js mongodb mongoose


    【解决方案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,因为它们通常齐头并进。您目前的这种做法与john 等中的joh 不匹配。

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 2017-04-21
      • 2015-02-27
      • 2022-11-10
      • 2015-08-04
      • 2018-10-23
      • 1970-01-01
      • 2017-09-29
      • 2019-12-03
      相关资源
      最近更新 更多