【发布时间】:2021-01-13 21:45:36
【问题描述】:
我有一个用 NestJS 最新构建的小应用程序,我正在使用 Mongoose v5。
我已经在数据库中填写了 500 多个工作参考。 我用聚合管道编写了一个搜索函数来匹配我集合中的正确元素:
const query = await this.jobsModel.aggregate([
{ $match : { name: { $regex: jobName, $options: 'i' } }},
{ $project : { id:1, name:1, familyId:1, familyColor:1, svgListIcon:1, _id:1}},
{ $addFields : { searchName : this.createSearchName('$name') }},
{ $sort : { 'name': 1 }},
])
return query;
我想解析每个 $name 字段以使用正则表达式并替换 $name 字段中的所有 \r\n :
createSearchName(jobName) {
return jobName.replace(/\r\n/," ");
}
不幸的是,这不起作用,因为 .replace() 不采用 jobName 参数,并且仅使用 '$name'...
实现此操作的正确方法是什么?
我需要做 1 个查询,解析结果,然后做一个聚合管道吗?
【问题讨论】:
-
如果您使用的是 MongoDB 4.4,那么您可以使用 new 聚合运算符replaceAll。
-
太棒了...非常感谢!刚刚从 4.2 更新到 4.4,这个运算符正是我想要做的!祝你有美好的一天:) 你可以回答,我会接受的。
-
我无法访问 4.4。您可以发布解决方案。
标签: regex mongodb mongoose mongodb-query aggregation-framework