MongoDB 在组聚合中使用 $regex

问题描述 投票:0回答:1

我有一个这样的样本数据:

`db.contact.insert(
[
  { _id: 1, name: 'John legend',age: 35},
  { _id: 2, name: 'michael Ava',age: 40},
  { _id: 3, name: 'Tom holand',age: 20},
  { _id: 4, name: 'Frido pex',age: 25},
  { _id: 5, name: 'Daniel Gunava',age: 30},
  { _id: 6, name: 'Mert Brava',age: 30}
 ]`

我想对名字中包含“ava”一词的人和另一组不包含ava的人进行分组并统计有多少人。

我知道如何在这样的函数中使用 $regex 和 group

`db.contact.find({name: {$regex: /ava/,$options: "i" }});`    

`db.contact.aggregate([{$group: {_id: "$name",count: {$sum: 1},}}]);`

如何结合上面的2个功能。任何帮助表示赞赏

我试过了(没用)

db.contact.aggregate([
  {
    $group: {
      _id: "$name",
      {$regex: /ava/,$options: "i" }
      count: {$sum: 1},
    }
  }
]);
regex mongodb aggregation-framework aggregate-functions group
1个回答
0
投票

您可以将

$facet
用于 2 种不同的情况。只需将您的尝试放入
$facet
管道即可。

db.contacts.aggregate([
  {
    "$facet": {
      "contains": [
        {
          "$match": {
            name: {
              $regex: "ava",
              $options: "i"
            }
          }
        },
        {
          "$group": {
            _id: "$name",
            count: {
              $sum: 1
            }
          }
        }
      ],
      notContains: [
        {
          "$match": {
            $expr: {
              $eq: [
                null,
                {
                  "$regexFind": {
                    "input": "$name",
                    "regex": "ava",
                    "options": "i"
                  }
                }
              ]
            }
          }
        },
        {
          "$group": {
            _id: "$name",
            count: {
              $sum: 1
            }
          }
        }
      ]
    }
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.