2017-02-15 3 views
1

중첩 된 문서로 구성된 상위 문서의 배열은 20에서 500 사이입니다. 각 부모 문서에 대해 표시되는 중첩 된 문서 수를 어떻게 제한 할 수 있습니까?MongoDB에 표시된 중첩 된 문서의 수를 제한하는 방법

아래는 내 문서 및 중첩 문서의 구조입니다.

[{ 
     id 
     title 
     users: [{ 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, { 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, { 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, 
      ... 
     ] 

    }, { 

    }, 
    ... 
] 

각 상위 문서에 표시되는 사용자 수를 제한하고 싶습니다. 어떻게?

내 쿼리

db.movies.aggregate(
[{$match: { 
    "movie_title": "Toy Story (1995)"} 
    },{ 
    $lookup: { 
     from: "users", 
     localField: "users.user_id", 
     foreignField: "users.id", 
     as: "users" 
    } 
}, 
{$project: { 

     movie_title: "$movie_title", 
     users: { $slice: [ "$users", 1 ] } 
    }} 
]); 

답변

2

당신은 쿼리 아래에 시도 할 수 있습니다. $slice을 사용하여 각 문서의 중첩 된 문서 배열에있는 첫 번째 n 요소를 가져옵니다.

db.collection.aggregate([{ $project: { title: 1, nUsers: { $slice: [ "$users", n ] } } ]) 

또는 정규 검색어 사용

db.collection.find({}, { title: 1, nUsers: {$slice: n } }) 
+0

내가 언급 한 것처럼 $ slice를 사용하여 쿼리를 표시했습니다. 하지만 나는 그걸 작동시키지 않는 것 같습니다. –

+0

당신이 이미 그것을 알아 냈 으면합니다. – Veeram

+0

"사용자"에 표시 할 필드 수를 어떻게 제한합니까? 나는 사용자 zip_code, 직업, 성별, 나이를 가진 것처럼 ... 나는 단지 zip_code와 직업만을 보여주고 싶다. –