2017-02-07 1 views
0

여기 도움이 필요합니다.

두 개의 모음이 있습니다. 첫 번째 모음의 크기가 너무 작아서 매우 작습니다.

두 번째 줄에는 중간 크기의 문서를 사용하는 훨씬 더 많은 항목 (수천 개, 훨씬 더 많을 수 있음)이 있습니다.

첫 번째 문서에는 두 번째 문서의 속성과 일치하는 속성이 있습니다.

여기서 첫 번째 컬렉션의 항목에는 두 번째 컬렉션에서 참조하는 다른 많은 항목이 있습니다.

예를 들어 사람을 나타내는 첫 번째 컬렉션이 있고 신용 카드 거래를 나타내는 두 번째 컬렉션이 있습니다. 사람은 많은 거래를 할 수 있습니다. PersonId는 persons 콜렉션의 id와 transactions 콜렉션의 모든 트랜잭션 문서입니다.

저는 각 개인이 얼마나 많은 수의가 있는지 계산하는 쿼리를 작성하고 싶습니다.

집계 및 조회를 사용하는 것이 좋습니다. 하지만 문서 크기가 제한을 초과한다는 메시지가 표시됩니다.

나는 모든 트랜잭션이있는 사람을 하나의 문서로 모으기 때문에 ... 추측하고 있습니다. 확실하지는 않습니다. 처음으로 mongodb를 경험하고 있습니다.

이를 달성하는 가장 좋은 방법은 무엇입니까? 집계 방법이 올바른 선택입니까?

고맙습니다. 길리는

답변

0

당신은 트랜잭션이

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}} 
]) 

출력은 사람의 ID와 그 사람에 대한 트랜잭션의 수를 포함하는 각 사용자에 대한 계산 얻기 위해 간단한 그룹화를 사용할 수 있습니다. 메모리에 사람과 거래 통계를 일치시킬 수 있습니다. 조회를 사용하여 트랜잭션 통계를 일부 개인 데이터로 리턴 할 수도 있습니다. 하지만 거래가없는 사람들에 대해서는 항목을 검색하지 않습니다 :

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}}, 
    { $lookup: 
     { 
     from: "people", 
     localField: "_id", 
     foreignField: "_id", 
     as: "person" 
     } 
    }, 
    {$unwind: "$person"}, 
    {$project:{name:"$person.name", count:"$count"}} 
]) 
관련 문제