2017-10-09 1 views
0

가능한 한 효율적으로 다음 쿼리를 구현하려고하므로 Mongodb Aggregation 프레임 워크를 사용하고 있습니다. I를 달성하기 위해 노력하고있어 출력 당 디바이스의 수를 포함하는 각 BUILDING위한 배열Mongodb 집계를 사용하고 동일한 조건의 속성 수를 얻으려고

{ 
    BUILDING: 'stringValue', 
    DEVICECLASS: 'stringValue', 
} 

이다

I 문서 다음과 같은 형식의 장치를 나타내는 각각 포함 mydevices라는 컬렉션을 각 카테고리의 예 : DEVICECLASS

'building xy': { 
    'mobile phone': 5, 
    'destkop': 3 
} 

지금까지 시도 일 : $count 운영자가 내 경우 helpfull되지 같은

collection.aggregate(
     [ 
      { 
       $group:{ // group by building 
        _id: {BUILDING}, 
        DEVCLASS: {DEVCLASS} // save devclass as property 
       } 
      } 
     ] 
    ) 

보인다?

$ 무대에 입력 된 문서 수를 포함하는 문서를 반환합니다.

설명서를 읽었으나 이제 막혔습니다. 어떻게 결과를 얻을 수 있습니까?

+0

하는'collection.aggregate 시도 ( [ { $ 그룹 : { _id : {BUILDING : "$ BUILDING", 명 DeviceClass : "$ DEVICECLASS"} 개수 : {$ sum : 1} } } ] ) ' – Veeram

+0

@V eeram 이걸 사용하면 주어진 장치의 수를 몰라도 모든 장치의 전체 수를 얻을 수 있습니다. 위치는 –

답변

1

시도 :

collection.aggregate([{$group:{_id:{"building" : "$building", "deviceclass":"$deviceclass"},count:{$sum:1} }}, 
     {$group:{_id:{"building" : "$_id.building" },result : {$push : {"deviceclass" : "$_id.deviceclass","count" : "$count"}}}}, 
     {$project : {"building" : "$_id.building" , "deviceclass" : "$result",_id:0}} 
    ]) 

당신은 얻을 것이다 :

{ 
    "building" : "building xy", 
    "deviceclass" : [ 
     { 
      "deviceclass" : "mobile phone", 
      "count" : 2.0 
     }, 
     { 
      "deviceclass" : "destkop", 
      "count" : 1.0 
     } 
    ] 
} 
+0

Ty 일 때만 가능합니다. 그것이 작동하는 방법에 대한 몇 가지 코멘트가 좋을 것이므로 집계 단계를 따를 수 있습니다 ... –

+0

건물 및 장치에 대한 첫 번째 그룹 데이터는 건물 및 장치에 그룹화되어 있습니다. 이후 건물에 대한 그룹은 동일한 건물에있는 동일한 장치를 가진 것입니다. 결과에 표시됨 –

관련 문제