2013-08-23 6 views
0

각 스레드에는 일련의 주석 문서 배열이 있습니다. ID를 기반으로 한 개의 주석 문서 만 반환하고 싶습니다. 스레드 ID와 주석 ID가 있습니다. 아아아 나는 그것을 할 수없는 것 같습니다. 주위를 둘러 보면서 다음과 같은 것을 생각해 냈지만 잘못되었습니다.몽구스 3.6 : id로 하나의 하위 문서 반환

이것은 매우 전형적인 사용 사례처럼 보입니다. 어디에서 잘못 될지 지적 해 줄 수 있습니까?

 var thread_id = vo.thread_id; 
     var _id = vo._id; 
     threads.model.find({_id:thread_id}).select({ comments: { $elemMatch: {_id:_id}}}).exec(function (err, thread) { 
        console.log("***************************************"); 
        console.log(err); 
        console.log(thread); 
        done(); 
       }); 
+0

더 많은 연구에서 나는 몽고 db의 설치가 1.6.2이고, $ elemMatch가 2.2 버전에서 도입 된 것 같습니다. http://docs.mongodb.org/manual/reference/projection/elemMatch/ – Chin

+0

[MongoDB는 배열의 선택된 항목 만 추출 할 수 있습니다] 중복 가능 (http://stackoverflow.com/questions/3985214/mongodb-extract-only) 선택된 항목의 배열) – JohnnyHK

답변

1

불행히도, MongoDB (및 따라서 Mongoose)는 현재 해당 작업을 직접 지원하지 않습니다. MongoDB는 배열의 요소 하나만 반환하는 기능이 없으므로 Mongoose도이를 지원하지 않습니다. (배열 항목의 색인을 가지고 있었지만 slice (documentation))을 사용할 수 있습니다.

또한 select 함수는 포함/제외 (documentation) 할 필드 목록 만 사용합니다. select 함수는 MongoDB의 projection 기능에 매핑됩니다. MongoDB 운영자는 사용할 수 없습니다.

select('comments') for example to only include the comments field from the document. But, this would return the entire array of 개의 댓글을 쓸 수 있습니다. 원하는 특정 주석을 추출하려면 클라이언트 측 필터링을 수행해야합니다.

배열에서 특정 요소를 추가 할 수있는 기능을 추가하기위한 요청이 열려 있습니다 (here).

일부 사용자는 집계 프레임 워크 (here)를 사용해 보시기 바랍니다.

+0

고마워, 내가 살펴 보겠다. 가능한 https://gist.github.com/aheckmann/3640687 수 있지만 내 버전의 mongodb 너무 깁니다 것 같습니다. – Chin

관련 문제