本帖最后由 cqwcns 于 2021-10-23 13:42 编辑
事情是这样的,微信小程序,云开发数据库,需求是关键字模糊查询。
官方文档在这:
Database.RegExp
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html
Aggregate.match(object: Object): Aggregate
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.match.html
由于需要查询的字段内容包含正则的特殊字符,如括号()、中横线-等。
一开始我这样查,根本查询不到内容:
[JavaScript] 纯文本查看 复制代码 return await db.collection(event.collection).aggregate()
.match({
equipmentName: new db.RegExp({
regexp: '茂名茂南区华侨新村宿舍I4二级(扩)',
options: 'i',
})
})
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
后来我想到应该是我未转义特殊字符,于是我这样查,但仍然是查不到内容:
[JavaScript] 纯文本查看 复制代码 return await db.collection(event.collection).aggregate()
.match({
equipmentName: new db.RegExp({
regexp: '茂名茂南区华侨新村宿舍I4二级\(扩\)',
options: 'i',
})
})
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
进一步尝试,我这样查,但仍然是查不到内容:
[JavaScript] 纯文本查看 复制代码 let thisReg = new RegExp('茂名茂南区华侨新村宿舍I4二级', 'i');
return await db.collection(event.collection).aggregate()
.match({
equipmentName: thisReg
})
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
后来我尝试这样,竟然能查询到内容:
[Asm] 纯文本查看 复制代码 return await db.collection(event.collection).aggregate()
.match({
equipmentName: /茂名茂南区华侨新村宿舍I4二级\(扩\)/i
})
.group({
_id: {
_id: '$_id',
department1: '$equipmentName',
department2: '$boxName'
}
})
.end();
虽然最后一种办法能实现功能,但当需要将一个变量作为关键字时,就不方便了,据我了解通过/.../的字面量形式创建的正则,无法直接引用变量作为关键字(斜杠中间的内容一律作为字符串)。
所以如果要引用变量,还要这样:
[JavaScript] 纯文本查看 复制代码 str='/小明可能是单身狗/i';
eval(str);
所以,大家认为这个,到底是我的代码有问题?还是腾讯云开发RegExp构建有BUG?
各位大佬有什么建议?谢谢交流。
|