需求,聚合阶段模糊查询。
看了一个老帖:聚合阶段,无法进行模糊匹配吗?? 邓坤力 的回答 - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0004a6e5574f10d5797915c845b000?jumpto=comment&commentid=000ca4f464cb2030b0890178251c
但我写的代码不行,麻烦帮忙看看哪里写错了?感谢。
1、用等值条件,能正常获得数据:
return await db.collection(event.collection).aggregate()
.match(_.or([
{
equipmentName: '茂名茂南区华侨新村宿舍I4二级(扩)(H)-POS001-1:8(13-12)'
},
{
boxName: '茂名茂南区华侨新村宿舍I4二级(扩)(H)-POS001-1:8(13-12)'
}
]))
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
2、用Regexp条件,不能获得数据:
return await db.collection(event.collection).aggregate()
.match(_.or([
{
equipmentName: db.RegExp({
regexp: '茂名茂南区华侨新村宿舍I4二级(扩)(H)-POS001-1:8(13-12)',
options: 'i',
})
},
{
boxName: db.RegExp({
regexp: '茂名茂南区华侨新村宿舍I4二级(扩)(H)-POS001-1:8(13-12)',
options: 'i',
})
}
]))
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
发现查询语法没有问题,是由于关键字包含了正则特殊字符(、-等。
关键字改为这样,可以正常获得数据:
equipmentName: '茂名茂南区华侨新村宿舍I4二级'
但问题又来了,我尝试对特殊字符进行转义,但仍然是查询不到:
equipmentName: '茂名茂南区华侨新村宿舍I4二级\('
不知道是不是db.RegExp不支持转义,还是我写错了,求指教,谢谢。