2015-02-05 4 views
0

내 몽고 스키마는 다음과 같습니다MongoDB를 : 포함 된 문서의 분류하기 필드

{ 
    "name":"Meeting Name", 
    "description":"Description", 
    "uuid":"YPCJaijg", 
    "participants":[ 
     "JLKGZnfFkGvX9DHgz", 
     "Rkhs4cu7LzyejcTYa" 
    ], 
    "log":{ 
     "1423091932927":"Let's do the 10th then", 
     "1423092118662":"Ok, the 10th it is.", 
     "1423092165083":"[Selected:20150210]" 
    } 
} 

내가 (타임 스탬프 : 메시지) '로그'의 필드로드해야합니다 텍스트 영역으로,하지만 그것은 수 있기 때문에 잠재적으로 커지면 쿼리의 일부로 정렬하고 제한하려고한다고 생각했습니다.

어떻게 접근하면 좋을까요? 나는 같은 것을 시도했다

db.meetings.find({uuid:"YPCJaijg"},{'log':1,'_id':0}).sort({"log":-1}) 

... 그러나 그것은 작동하지 않는다. 나는 집계 프레임 워크를 조사해 왔지만 그것이 올바른 방향인지 아직 알 수 없다. 나는 또한이 스키마가 처음에는 적절하다고 확신하지 못했습니다. 모든

+0

크기가 커질 수 없습니다. * 큰 문서 크기는 현재 16 메가 바이트입니다. 그래서, 그냥 그것을로드하고 클라이언트 측과 처리하거나 스키마를 변경하십시오. –

답변

0

먼저 당신은 당신의 스키마에 문제가 :

  • evergrowing 문서는 몽고에 대한 나쁜. 최대 크기는 16MB보다 커질 수 없으며 문서에 새로운 정보를 추가한다는 사실은 파일 시스템에서 문서의 많은 이동을 야기합니다 (패딩이 채워지는 경우)

$sort during the update operator을 사용하여 새 값을 푸시하면서 요소를 정렬 할 수 있습니다. 이렇게하면 찾기 도중 이미 정렬하게됩니다. 하위 문서의 요소 수를 제한하려면 $slice projection.을 사용하면됩니다.

그럼에도 불구하고이 작업을 수행 할 수 있습니다. 만약 내가 당신이라면 스키마를 두 개의 모음으로 변경하려고합니다. 하나는 현재 로그가없고 다른 하나는 로그입니다.

+0

맞습니다. 처음에는 로그에 대한 별도의 컬렉션을 고려했지만 간단한 것으로 시작하고 싶었습니다. 회의 로그는 16MB에 가깝게 올 필요가 없으므로 지금이 스키마를 고수하고 클라이언트 측 정렬을 수행 할 것입니다. – T3db0t

+0

$ sort update 연산자를 사용하려면 로그가 객체 (문서)의 배열이어야합니다. 맞습니까? – T3db0t

+0

@ VirgilDisgr4ce 죄송합니다. 그 부분을 놓쳤습니다. 객체가 아니라 배열이어야합니다. –

관련 문제