gpt4 book ai didi

mongodb - 那个领域不一样的Mongo投影领域

转载 作者:可可西里 更新时间:2023-11-01 10:41:04 26 4
gpt4 key购买 nike

那里

我的问题可能很困惑。让我进一步解释一下。

我有这样的聚合文档。

{
"metric" : "user_act",
"stream_id" : "f00001",
"values" : {
"likes" : 57,
"comments" : 0,
"shares" : 0
}
}
{
"metric" : "user_act",
"stream_id" : "f00002",
"values" : {
"likes" : 28,
"comments" : 0,
"shares" : 1
}
}

{
"metric" : "user_act",
"stream_id" : "t00001",
"values" : {
"favorites" : 5,
"retweets" : 15
}
}

我想通过点赞、评论和分享的总和来计算参与度。所以在计算之前,我必须在分组之前投影数据。我想将 values.favorites 映射到 likes,将 values.retweets 映射到 sharescomments 如果没有任何数据集默认为 0。

我尝试像下面这样的投影但不起作用,因为 $ifNull 第二行的值覆盖了第一行。

{
$project: {
"stream_id" : 1,
"shares": {
$ifNull: ["$values.retweets",0],
$ifNull: ["$values.shares", 0]
} ,
"likes": {
$ifNull: ["$values.favorites",0],
$ifNull: ["$values.likes", 0]
} ,
"comments": {
$ifNull: ["$values.replys",0],
$ifNull: ["$values.comments", 0]
}
}
}

有人知道吗?先谢谢你。

[更新]我尝试像这样投影,但在 case: 中不起作用,我如何检查该字段是否存在?

{
$project: {
"stream_id" : 1,
"shares": {
$switch: {
branches: [
{ case: {$ne: ["$values.retweets", 0]},
then: {$ifNull: ["$values.retweets", "$values.retweets"]}
},
{ case: {$ne: ["$values.shares", 0]},
then: {$ifNull: ["$values.shares", "$values.shares"]}
}
],
default: 0
}
}
}
}

最佳答案

你可以试试$cond投影。

db.collection.aggregate({
$project: {
"stream_id" : 1,
"shares": { $cond: [ { $eq:[ { $ifNull: [ "$values.shares", 0 ] }, 0 ] },{ $ifNull: [ "$values.retweets", 0 ] }, "$values.shares" ] },
"likes": { $cond: [ { $eq:[ { $ifNull: [ "$values.likes", 0 ] }, 0 ] }, { $ifNull: [ "$values.favorites", 0 ] }, "$values.likes" ] },
"comments": { $cond: [ { $eq:[ { $ifNull: [ "$values.comments", 0] }, 0 ] }, { $ifNull: [ "$values.replys", 0 ] }, "$values.comments" ] }
}})

使用$switch

db.collection.aggregate([{
$project: {
"stream_id" : 1,
"shares": {
$switch: {
branches: [
{ case: { $ifNull: [ "$values.shares", false ] },
then: "$values.shares"
},
{ case: { $ifNull: [ "$values.retweets", false ] },
then: "$values.retweets"
}],
default: 0
}
}
}
}])

关于mongodb - 那个领域不一样的Mongo投影领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024819/

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