收藏
回答

聚合aggregate的match是否可以使用Regexp条件?

需求,聚合阶段模糊查询。

看了一个老帖:聚合阶段,无法进行模糊匹配吗?? 邓坤力 的回答 - 微信开放社区 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();



回答关注问题邀请回答
收藏

1 个回答

  • 唐同学
    唐同学
    2021-10-23

    发现查询语法没有问题,是由于关键字包含了正则特殊字符(、-等。

    关键字改为这样,可以正常获得数据:

    equipmentName: '茂名茂南区华侨新村宿舍I4二级'
    


    但问题又来了,我尝试对特殊字符进行转义,但仍然是查询不到:

    equipmentName: '茂名茂南区华侨新村宿舍I4二级\('
    


    不知道是不是db.RegExp不支持转义,还是我写错了,求指教,谢谢。


    2021-10-23
    有用
    回复
登录 后发表内容