반응형
MongoDB 조건부 $sum
mongodb의 내 컬렉션은 SQL의 다음 표와 유사합니다.
감정(회사, 감정)
이제 다음과 같은 쿼리를 실행해야 합니다.
SELECT
Company,
SUM(CASE WHEN Sentiment >0 THEN Sentiment ELSE 0 END) AS SumPosSenti,
SUM(CASE WHEN Sentiment <0 THEN Sentiment ELSE 0 END) AS SumNegSenti
FROM Sentiments
GROUP BY Company
이 문의를 몽고어로 작성하려면 어떻게 해야 하나요?나는 다음 질문에 막혀 있다.
db.Sentiments.aggregate(
{ $project: {_id:0, Company:1, Sentiment: 1} },
{ $group: {_id: "$Company", SumPosSenti: {$sum: ? }, SumNegSenti: {$sum: ? } } }
);
Sammaye가 제안한 대로 이를 수행하려면 집계 투영 연산자를 사용해야 합니다.
db.Sentiments.aggregate(
{ $project: {
_id: 0,
Company: 1,
PosSentiment: {$cond: [{$gt: ['$Sentiment', 0]}, '$Sentiment', 0]},
NegSentiment: {$cond: [{$lt: ['$Sentiment', 0]}, '$Sentiment', 0]}
}},
{ $group: {
_id: "$Company",
SumPosSentiment: {$sum: '$PosSentiment'},
SumNegSentiment: {$sum: '$NegSentiment'}
}});
버전 3.4부터는 단계에서 논리 조건 처리가 가능한 연산자를 사용할 수 있게 되었습니다.물론 우리는 여전히 금액을 반환하기 위해 축전지를 사용해야 합니다.
db.Sentiments.aggregate(
[
{ "$group": {
"_id": "$Company",
"SumPosSenti": {
"$sum": {
"$switch": {
"branches": [
{
"case": { "$gt": [ "$Sentiment", 0 ] },
"then": "$Sentiment"
}
],
"default": 0
}
}
},
"SumNegSenti": {
"$sum": {
"$switch": {
"branches": [
{
"case": { "$lt": [ "$Sentiment", 0 ] },
"then": "$Sentiment"
}
],
"default": 0
}
}
}
}}
]
)
아직 이행하지 않은 경우mongod
3.4 이후로는 이 답변의 단계는 중복됩니다.이것은 오퍼레이터가 수치값을 반환하기 때문입니다.이것은, 문서를 작성할 수 있고, 에 적용할 수 있는 것을 의미합니다.$cond
표현.
이것에 의해, 특히 대량의 수집에 대해서, 애플리케이션의 퍼포먼스가 향상됩니다.
db.Sentiments.aggregate(
[
{ '$group': {
'_id': '$Company',
'PosSentiment': {
'$sum': {
'$cond': [
{ '$gt': ['$Sentiment', 0]},
'$Sentiment',
0
]
}
},
'NegSentiment': {
'$sum': {
'$cond': [
{ '$lt': ['$Sentiment', 0]},
'$Sentiment',
0
]
}
}
}}
]
)
다음 문서와 함께 Sentions 컬렉션을 검토합니다.
{ "Company": "a", "Sentiment" : 2 }
{ "Company": "a", "Sentiment" : 3 }
{ "Company": "a", "Sentiment" : -1 }
{ "Company": "a", "Sentiment" : -5 }
집약 쿼리는 다음과 같은 결과를 생성합니다.
{ "_id" : "a", "SumPosSenti" : 5, "SumNegSenti" : -6 }
배열 구문을 사용하는 위의 스니펫에 대해 설명합니다.
PosSentiment: {$cond: [{$gt: ['$Sentiment', 0]}, '$Sentiment', 0]}
다음과 같습니다.
PosSentiment: {$cond: { if: {$gt: ['$Sentiment', 0]}, then: '$Sentiment', else: 0} }
어레이 구문은 긴 구문을 다음과 같이 요약합니다.{ $cond: [if, then, else] }
언급URL : https://stackoverflow.com/questions/14102596/conditional-sum-in-mongodb
반응형
'programing' 카테고리의 다른 글
문자열 중간에 문자 추가 (0) | 2023.02.25 |
---|---|
$rootScope($rootScope 。$140 대$140입니다.$140 (0) | 2023.02.25 |
Angular 2 구성 요소 속성의 기본값을 설정하려면 어떻게 해야 합니다. (0) | 2023.02.25 |
워드프레스:TOP 레벨 카테고리만 표시 (0) | 2023.02.25 |
Oracle을 사용하여 선택 (0) | 2023.02.25 |