mongodb - 如果输入数组的元素至少匹配一个,则获取数组的大小

我想统计视频的观看次数。我有以下结构。

{
    _id: ObjectId("some_id")
    views:[
        { userId:1, groupId:[1,2,4] },
        { userId:2, groupId:[2,4] },
        { userId:1, groupId:[3,5] }
    ]
}

我只需要计算两个数组(views.groupId 和输入数组)是否有公共(public)元素,将计数加一。 如果输入数组是 [1,3,5],那么 View 数是 2。(第一个对象有元素 1,第三个对象有元素 3,5)

我写了下面的代码,但给出了错误的答案。

{
    $project: {
        views: {
            $size: {
                $ifNull: [{
                        $filter: {
                            input: '$views',
                            as: 'views',
                            cond: {
                                $setIntersection: [
                                    '$$views.groupId',
                                    [1,3,5]
                                ]
                            }
                        }
                    },
                    []
                ]
            }
        }
    }
}

我花了更多时间自己解决,但今天没有运气。提前致谢

最佳答案

您需要为 $filter 运算符定义一个有效条件

在您的情况下,如果您在 cond 参数中返回 Number 值,它将使用 this convention 将其转换为 Boolean :

db.collection.aggregate([
  {
    $project: {
      views: {
        $size: {
          $ifNull: [
            {
              $filter: {
                input: "$views",
                as: "view",
                cond: {
                  $size: {
                    $setIntersection: [
                      "$$view.groupId",
                      [ 1, 3, 5]
                    ]
                  }
                }
              }
            },
            []
          ]
        }
      }
    }
  }
])

MongoPlayground | Alternative $gt

https://stackoverflow.com/questions/62690537/

相关文章:

python - 如何正确创建具有所需大小和分辨率(PNG、JPG、JPEG)的新图像?

typescript - TypeScript 中任意数量类型的非析取联合

python - 比较两个列表,如果相等则替换第三个列表中的值

azure - 如何使用 terraform 创建 azure 事件网格系统主题?

javascript - 在 Chrome 中将下/上填充应用于具有最小值和最大值的 "input

python-3.x - 无法在 Python 3.8 上运行 Supervisor

jsf - Primefaces Dynaform 奇怪的行为与 f :validateLength

azure - 雪花 - Azure 事件目录集成

oracle - 如何使用 UTF8 作为国家字符集在 docker 中创建 Oracle 数据库?

java - Bootstrap 类路径未与 -source 8 一起设置