gpt4 book ai didi

mongodb - 条件总和 mongodb 聚合

转载 作者:可可西里 更新时间:2023-11-01 10:45:51 25 4
gpt4 key购买 nike

我正在尝试根据条件对文档数组求和。

{
$project: {
watched: 1,
numberOfWatched: {
$sum: {
// $cond: {
// if: {
// $eq: ['$watched.status', true],
// then: 1,
// else: 0
// }
// }
$cond: [
{ $eq: ['$watched.status', true]},
1,
0
]
}
},
durationWatched: {$sum: "$watched.duration"}
}
}

这是我得到的输出。在这里你可以看到我的 watched 数组中有一个状态为 true 的值。所以 numberOfWatched 应该是 1。而不是返回 0。

[
{
"_id":"5bacb579921406542350d254",
"watched":[
{
"_id":"5baf44ee2369280542a4c41e",
"duration":24.083333333333332,
"user_id":"5bacbb05d2b8e4577b038f43",
"video_id":"5bacb5b1921406542350d25e",
"module_id":"5bacb588921406542350d256",
"course_id":"5bacb579921406542350d254",
"createdAt":"2018-09-29T09:25:02.107Z",
"updatedAt":"2018-09-29T09:25:02.107Z",
"__v":0,
"status":true
}
],
"numberOfWatched":0,
"durationWatched":24.083333333333332
}
]

最佳答案

你可以试试下面$size$filter聚合

db.collection.aggregate([
{ "$project": {
"watched": 1,
"numberOfWatched": {
"$size": {
"$filter": {
"input": "$watched",
"cond": { "$eq": [ "$$this.status", true ] }
}
}
},
"durationWatched": {
"$let": {
"vars": {
"dw": {
"$filter": {
"input": "$watched",
"cond": { "$eq": [ "$$this.status", true ] }
}
}
},
"in": { "$sum": "$$dw.duration" }
}
}
}}
])

关于mongodb - 条件总和 mongodb 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52567430/

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