MongoDB:使用正则表达式聚合数组元素

Posted

技术标签:

【中文标题】MongoDB:使用正则表达式聚合数组元素【英文标题】:MongoDB: Aggregate on array elements with regex 【发布时间】:2022-01-18 22:55:32 【问题描述】:

我使用 MongoDB v 4.2.17,其中有一组文档,例如:

[
  
    a: 'a',
    b: 'b',
    c: ['apples', 'grapes']
  ,
  
    a: 'a',
    b: 'b',
    c: ['elephants', 'apes']
  
]

我需要编写一个查询来返回所有文档,其中数组c 的任何元素都与提供的正则表达式匹配。

我有一个匹配数组中第一个元素的解决方案:

db.collection.aggregate([$match: 'c.0': $regex: 'apes' ])

此查询成功匹配数组中第一个元素与正则表达式匹配的文档。

我需要编写一个 聚合 来获取数组中 任何元素 与正则表达式匹配的文档。

我试过了(没用)

db.collection.aggregate([$match: 'c.$': $regex: 'apes' ])

我需要使用regex 和聚合,所以简单的find 将不起作用。 提前致谢。

【问题讨论】:

【参考方案1】:

只需使用值c,而不是c.0c.$

db.collection.aggregate([
  
    $match: 
      "c": 
        $regex: "apes"
      
    
  
])

查看this example

【讨论】:

以上是关于MongoDB:使用正则表达式聚合数组元素的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式元素数组的 MongoDB 查询 $in

使用正则表达式元素数组的 MongoDB 查询 $in

MongoDB 正则表达式

从数组中删除与正则表达式不匹配的元素

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

mongodb 正则