我有一个最新的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个查询,解析结果,然后执行聚合管道吗?
答案 0 :(得分:0)
由于@prasad_,我将MongoDB的版本从4.2更新到了4.4,并且使用了新的运算符replaceAll。 该运算符在查询中充当.replace()。
这是我的新聚合管道:
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 : { $replaceAll: { input: '$name', find: '\r\n', replacement: ' '}} }},
{ $sort : { 'searchName': 1 }}
]);