gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:05:35 25 4
gpt4 key购买 nike

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

{
_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

关于mongodb - 如果输入数组的元素至少匹配一个,则获取数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62690537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com