2012-02-16 3 views
2

내 내장 된 페이징 상황과 관련된 an older question을 확인했습니다. 슬라이싱으로 임베디드 페이징이 제대로 작동하지만 총 페이지 수는이며, 여전히 서버 측에서 주석의 전체 크기를 가져올 수 있는지 궁금합니다.mongodb의 전체 페이지가 포함 된 페이징 구현

내 문서에 전체 문서를 가져와 수동으로 계산하지 않고도 서버에서 임베디드 배열의 크기를 쿼리하거나 계산할 수 있습니까?

이 질문에 2 개의 질문을하는 것은 마음에 들지 않습니다. 1 개는 페이지 메모로, 1 개는 의견 총을 가져 오는 것입니다. 하나의 쿼리에서이 작업을 수행 할 수 있다면 놀랄 것입니다.

덧붙여서, 나는 java 드라이버와 spring-data mongodb를 사용하고 있습니다.

의견을 말하십시오. 감사 !

답변

5

임베디드 문서의 총 개수를 얻는 가장 빠른 방법은 추가 필드를 만들고 각 업데이트/삽입 후에 카운트를 다시 계산하는 것입니다.

//this query will include only 10 comments _id and comments count of root document 
db.articles.find({}, {comments:{$slice: [20, 10]}, _id:1, commentsCount: 1}) 

를 그리고 사실은 내가 이야기하고 있지 않다 포함 된 문서의 총 수를 (계산하는 다른 방법이 없습니다 : 문서 조각을 할 때 그럼 당신은 단순히 commentsCount 필드를 포함 할 수 있습니다이

{ 
    _id: 1, 
    comments: [], 
    commentsCount: 5 
} 

처럼 될 것입니다 약 m/r, 실시간 요청 때문에 느림)

+0

답변은 나에게 얼굴 표정과 같습니다. 나는 비정규 화를 사용하고 많은 경우에 세기지만, 나는이 경우에 대해 생각하지 않았다. 고맙습니다 ! – bertie

+0

@AlbertKam : 비정규 화는 nosql 데이터베이스의 가장 좋은 친구입니다.) –

관련 문제