2017-11-25 3 views
0

내가 가진 MongoDB를 수집,이 같은 하나 개의 문서 - 매일 생성 된 약 1000 새 것으로 약 30,000 이러한 문서가 있습니다는 MongoDB를 집계 쿼리 - 그룹 집계 필드 오류

{ 
    "_id" : ObjectId("5a187babdbf0a03cdca0d0bc"), 
    "aggregationDate" : "2017-10-31", 
    "ipaddress" : "10.65.66.184", 
    "first" : { 
     "count" : 3 
    }, 
    "second" : { 
     "count" : 2 
    }, 
    "third" : { 
     "count" : 3 
    }, 
} 

. 나는 가장 높은 활동을 가지고있는 "ipaddress"를 보여주고 싶다. "first", "second", "third"의 가장 높은 수로 정의된다.

나는 집계 쿼리를 고개를 쓴 다음 한 -

"errmsg" : "exception: the group aggregate field 'ipaddress' must be defined as an expression inside an object", 

누군가가 집계 쿼리를 작성하여이 오류 좀 도와주세요 수 - 나는 불행하게도 오류가

db.collection.aggregate({ $group : { ipaddress: "$ipaddress", 
          max: { $max : [ "$first.count", "$second.count", "$third.count" }}}); 

내 요구 사항? $group 파이프 라인에 해당

ipaddress: "$ipaddress" 

필드 IPADDRESS 같은 일을 할 수 없기 때문에 감사

+0

첫 번째, 두 번째 및 세 번째의 가장 높은 합계를 찾는 사람이 있습니까? 예 : {첫 번째 : 10, 두 번째 : 10, 세 번째 : 10}의 문서는 모든 개인을 최고로 가질 수 있지만 {첫 번째 : 200, 두 번째 : 0, 세 번째 : 0} 필드에서 더 큰 합계를가집니다. –

+0

@BuzzMoschetti 첫 번째, 두 번째 및 세 번째로 높은 합계는 내가 찾는 것입니다. –

답변

0

이 트릭을 할해야합니다. 거기에는 $add 기능이 필요합니다.

db.foo.aggregate([ 
    {$group: {_id: "$ipaddress", 
      max: { $max: {$add: [ "$first.count", "$second.count", "$third.count"] } } 
      } 
    } 
]); 
+0

아, 네! 정말 고맙습니다.. :) –

0

그래 그 어큐뮬레이터 운영자가 동반되어야합니다.

_id: "$ipaddress" 

귀하의 $max 운영자 습관 중 하나를이 방식으로 작동 : 여기 문서는 당신이 당신은 그런 식으로 작성해야 IPADDRESS에 의해 그룹에 의미하는 경우 우수가보고 here

을 가지고있다. 이 방법은 $group이 아닌 $project 파이프 라인에서 사용하는 방법입니다. here

그래서 당신의 집계는 다음과 같이 할 것 봐 주시기 바랍니다 :

db.collection.aggregate([ 
{ 
    $group: 
    { 
     _id: "$ipaddress", 
     max: { 
      $max: {first: "$first.count", second: "$second.count", third: "$third.count"} 
     } 
    } 
} 
])