如何在mongodb聚合中查找搜索字符串的出现次数?

Posted

技术标签:

【中文标题】如何在mongodb聚合中查找搜索字符串的出现次数?【英文标题】:How to find number of occurrence of searched string in mongodb aggregation? 【发布时间】: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'] 【参考方案1】:

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

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

【讨论】:

以上是关于如何在mongodb聚合中查找搜索字符串的出现次数?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在特定条件下执行 MongoDB 聚合阶段之一?

MongoDB 查找与使用聚合指定的任何条件匹配的文档

如何在 mongodb 聚合中将动态字符串传递给 $regex

Js对象(五)如何查找字符串中出现次数最多的字符 2021-11-24

如何在字符串vb.net中查找子字符串的出现次数

MongoDB,如何将查找和排序与聚合中的 $cond 结合起来?