2016-12-05 2 views
0

가장 많이 사용되는 카드 조합에 대한 통계를 작성하고 있습니다. $ players.spells.d의 _id를 사용하여 $ 플레이어를 풀고 쉽게 그룹화 할 수 있습니다. 이것은 매우 빠르게 작동하고 내가 원하는 것을 정확하게 제공합니다.MongoDB 집계 동일한 배열 요소의 합계 방법?

내가 가진 문제는 내가 고려 카드의 레벨을하는 방법을 알아낼 수 없습니다입니다. (카드를 업그레이드 할 수 있음) - 레벨이 누락되면 레벨이 1임을 의미합니다. 그래서 마지막에 얻고 자하는 것은 갑판 ID입니다 (모든 카드의 조합입니다. 아래의 $ players.spells.d 그룹화로 이미 생성 된 마술 트릭을 수행하십시오.), 해당 조합에 대한 각 개별 카드의 평균 레벨. 사전에 어떤 도움

{ 
    "_id" : 123, 
    "players" : [ 
     { 
      "id" : 41, 
      "spells" : [ 
       { 
        "card" : 11, 
        "level" : 2 
       }, 
       { 
        "card" : 12 
       }, 
       { 
        "card" : 13, 
        "level" : 2 
       }, 
       { 
        "card" : 14 
       }, 
       { 
        "card" : 15, 
        "level" : 2 
       }, 
       { 
        "card" : 16, 
        "level" : 2 
       }, 
       { 
        "card" : 17, 
        "level" : 2 
       }, 
       { 
        "card" : 18 
       } 
      ] 
     }, 
     { 
      "id" : 31, 
      "spells" : [ 
       { 
        "card" : 7 
       }, 
       { 
        "card" : 88 
       }, 
       { 
        "card" : 9 
       }, 
       { 
        "card" : 10 
       }, 
       { 
        "card" : 11 
       }, 
       { 
        "card" : 12 
       }, 
       { 
        "card" : 13 
       }, 
       { 
        "card" : 14 
       } 
      ] 
     } 
    ] 
} 

감사 :

db.matches.aggregate([ 
    {$unwind: "$players"}, 
    {$group: { 
      '_id': '$players.spells.card', 
      'count': {'$sum' : 1} 
     } 
    }, 
    {$sort: {'count' : -1}} 
]); 

여기 일치하는 문서 모습처럼, 각 경기는 두 선수가 무엇을 :

이 내 쿼리입니다! 여기

+0

갑판 ID가 무엇이며 players.spells.d은 무엇인가? – sergiuz

+0

나는 위의 쿼리를 업데이트했으며 d는 카드로되어 있었고, 모든 사람들을 위해 더 쉽게 읽고 쓸 수 있도록했습니다. – ruinernix

답변

0

당신은 이동 :

db.matches.aggregate([ 
    {$unwind: "$players"}, 
    {$unwind:"$players.spells"}, 
    {$group:{"_id":"$players.id","count":{"$sum":"$players.spells.card"}} 
}]) 
+0

시도해 주셔서 감사하지만 해결책은 없습니다 : 플레이어 ID가 아닌 모든 카드 ID를 연결해야하며 위 질문에서 누락 된 각 카드의 평균 레벨을 알고 싶습니다. – ruinernix

+0

db.testC.aggregate ([{$ unwind : "$ players {$ unwind : "$ players.spells"}, {$ group : { "_id": "$ _ id", "count": { "$ sum": "$ players.spells.card"}, "avg": { "$ avg": "$ players.sp ells.level"}}}]) –

+0

레벨 1을 추가하거나 모든 카드에 레벨을 추가해야합니다. 응용 프로그램에서 작업하여 수준이 존재하는지 여부를 확인하십시오. –

관련 문제