2
내 질문이 혼동 스러울 수 있습니다. 더 자세히 설명해 드리겠습니다.
이와 같은 집계 문서가 있습니다.
{
"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
}
}
저는 좋아요, 댓글 및 공유 합계로 참여도를 계산하고 싶습니다. 따라서 계산하기 전에 그룹화하기 전에 데이터를 투영해야합니다. 나는 다음과 같은 투사를 시도 0
모든 데이터 세트의 기본을 가지고 있지 않지만 때문에 작동하지 않을 경우 나는 shares
과 comments
에 values.favorites
-likes
, values.retweets
을 매핑하고 싶은 $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
}
}
}
}
그래, 그것은 작품은 바로,이 조건의 사용? 내가 메트릭의 이름과 같은 IG 또는 Youtube와 같은 많은 사회적 요소가없는 경우 어떻게 처리 할 수 있어요. – Bongsakorn
정확하게. 더 많은 조건을 중첩시킬 수 있지만 너무 많은 데이터가있는 경우 데이터를 db에 삽입하기 전에 수정하는 것이 좋습니다. – Veeram
죄송합니다. 수정 하시겠습니까? 나는이 $ values.love와 같은 문서를 문서에 가지고 있다고 가정합니다. 조건은 많은 중첩 된 상태 여야합니다. – Bongsakorn