2016-06-13 3 views
1

다른 컬렉션의 고유 한 문서를 사용자가 공유하는 정도에 따라 계속 표시 할 수 있습니다 (예 : item 이하). 가장 공유 된 문서를 찾는 집계 쿼리를 만들고 싶습니다. 내가 특정 기준과 일치하지 않기 때문에 필요한 $ 일치가 없습니다. 가장 많이 공유 한 것을 쿼리하는 것입니다. 지금 당장 가지고 있습니다 :

db.stories.aggregate(
    { 
     $group: { 
      _id:'item.id', 
      'item': { 
       $first: '$item' 
      }, 
      'total': { 
       $sum: 1 
      } 
     } 
    } 
); 

그러나 이것은 단지 1 개의 결과를 반환합니다. 단순한 find 쿼리를 수행해야하지만 쿼리 결과를 집계하여 각 결과에 항목이 있고 총 횟수가 컬렉션에 표시되도록합니다. 이야기 모음의 문서

예 :

{ 
    _id: ObjectId('...'), 
    user: { 
     id: ObjectId('...'), 
     propertyA: ..., 
     propertyB: ..., 
     etc 
    }, 
    item: { 
     id: ObjectId('...'), 
     propertyA: ..., 
     propertyB: ..., 
     etc 
    } 
} 

usersitems 각각뿐만 아니라 자신의 컬렉션을 가지고있다.

+1

예제 입력 문서를 추가 할 수 있습니까? – profesor79

+0

좋아, 이야기 컬렉션에서 예제 문서를 추가했습니다. – inorganik

+1

'item.id'의 접두사는'$'로해야합니다. '$ id' 단계를'_id : '$ item.id'로 변경하십시오. – styvane

답변

0

변경

_id:'$item.id' 

에 선

_id:'item.id' 

현재 당신이 상수는 'item.id'때문에 당신은 오직 결과로 하나의 문서를 얻을 수에 의해 그룹.