【问题标题】:How to find number of occurrence of searched string in mongodb aggregation?如何在mongodb聚合中查找搜索字符串的出现次数?
【发布时间】:2021-09-29 15:21:57
【问题描述】:

我想通过使用 mongodb 聚合来查找字符串中出现的计数或次数。 这些是我的对象数组:-

[
  {
    text:'Dummy Lorem Ipsum',
    name:'Alex'
  },
  {
    text:'Other dummy dummy Data dummy',
    name:'John'
  },
  {
    text:'Another dummy dummy data',
    name:'Abraham'
  },
  {
    text:'Last dummy one dummy data dummy',
    name:'Bethny'
  },
  {
    text:'Andrew has no data to display',
    name:'Andrew'
  },
];

如果我搜索 'dummy' 作为搜索字符串,那么我想要使用 mongodb 聚合这样的输出:-

  {
    text:'Dummy Lorem Ipsum',
    name:'Alex',
    count:1
  },
  {
    text:'Other dummy dummy Data dummy',
    name:'John',
    count:3
  },
  {
    text:'Another dummy dummy data',
    name:'Abraham',
    count:2
  },
  {
    text:'Last dummy one dummy data dummy',
    name:'Bethny',
    count:3
  },
  {
    text:'Andrew has no data to display',
    name:'Andrew',
    count:0
  },
];

请指导我尽快进行适当的聚合查询来解决这个问题。 提前致谢。

【问题讨论】:

  • 你想不区分大小写搜索,对吧?
  • 到目前为止你做了什么?显示您的代码
  • 是的,我想按不区分大小写的方式进行搜索 @CuongLeNgoc ..我只是通过在匹配查询中搜索正则表达式来做到这一点 @BadPiggie [{'$match': { 'text': {'$regex': 'dummy', '$options': 'i'}}}]

标签: javascript node.js mongodb mongoose aggregation-framework


【解决方案1】:

如果您使用的是 MongoDB 4.2+,您可以使用 $size$regexFindAll 来获取您的计数:

YourModel.aggregate([
  {
    "$addFields": {
      "count": {
        $size: { 
          $regexFindAll: { input: "$text", regex: /dummy/, options: 'i' }  }
        }
    }
  }
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2012-12-26
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2015-03-20
    相关资源
    最近更新 更多