node.js - 在猫鼬中使用多个聚合运算符
问题描述
我有一个猫鼬查询,它使用 $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 之前以及每个字段上都尝试过。
任何帮助,将不胜感激。
解决方案
$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
因为它们通常齐头并进。你目前的这种做法joh
在john
等方面不匹配。
推荐阅读
- c# - 尝试设置配置值`IHostBuilder`,但未反映在启动类中的 ConfigureServices - asp.net core 3.1
- sorting - 颤动按日期对数组列表进行排序
- javascript - “字符串”类型上不存在 Typescript 属性“标签”
- aws-lambda - 如何在 CodeBuild 中为 Lambda 函数添加 Python 库依赖项
- java - Spring Boot JPA 获取列表并向其中添加项目会引发错误
- spotfire - TIBCO Spotfire:错误消息:无法在 Spotfire.Dxp.Data 创建 DataTable ImportException:无法创建 DataTable(HRESULT:80131500)
- c# - CSVHelper - 将名称从 CSV 导入具有相同名称属性的对象
- python - 如何从不同的文件调用方法而不在python中导入它
- python - 通过循环的 kafka 消费者获取消息和手动调用 poll 有什么区别?
- java - 绘制/绘制数学函数时 drawPolyLine() 与 drawLine()