我想统计视频的观看次数。我有以下结构。
{
_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