我有一个猫鼬查询,使用$或聚合器查看在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之前以及每个字段上都尝试过。
任何帮助将不胜感激。
答案 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
不匹配。