2013-03-25 6 views
4

그래서 나는 몽구스에서 ID로 특정 문서를 질의했다. 이 문서에는 일련의 항목이 있습니다. 이 목록은 항상 매우 작습니다 (10 개 미만 항목). 배열에서 특정 항목을 가져 오는 방법이 있는지 궁금합니다. 내가 항목의 배열을 얻을 수 몽구스 문서에서몽구스, 문서 배열에서 항목 찾기

Example doc: 
{ 
    _id: 1, 
    name: 'some name, 
    items: [{ 
     id: 23, 
     name: 'item name 23' 
    },{ 
     id: 24, 
     name: 'item name 24' 
    }] 
} 

:

doc.get('items') 

가 거기에서 내가 배열을 반복하고 나는 별거없는, 원하는 것을 찾을 수 있습니다. 이것이 프레임 워크에서 제공되는 경우 휠을 재발 명하고 싶지 않습니다.

+0

위치를 알고 있으면 "점 표기법"(예 : 'items.0')을 사용할 수 있습니다. http://docs.mongodb.org/manual/core/read-operations/#arrays –

+0

나는 원하지 않습니다. 위치별로 찾으려면 이드가 찾고 싶다. I.E. doc.get ('items'). find (23); 물론 내가하려는 일의 예가 존재하지 않습니다. – lostintranslation

+0

나는 해결책이 [여기] (http://stackoverflow.com/questions/15213089/mongodb-mongoose-find-object-based-on-array-element-return-only-matching-array)에 게시된다고 생각한다. – Volox

답변

12

제대로 작동한다고 생각합니다.

Document.findById({docId, 'items.id': 'yourId'}, {'items.$': 1}, function(err, item){ 

} 
+3

그것이 효과가 있다면 나는 당신이 그것을 대답으로 받아 들일 수 있다고 생각합니다. 감사합니다 – Leonardo

+0

는 오직 requied 필드를 얻을 수 있습니까? –

+0

@AryehArmon 다른 검색어와 마찬가지로 필요한 필드를 포함 할 수 있다고 생각합니다.'''{ : 1}'''는 필드 이름을 포함하고 나머지는 제외하고 0은 필드 이름을 제외합니다. – hoodsy

1

정확히 그렇게하기위한 id 방법이 있습니다.

http://mongoosejs.com/docs/subdocs.html

용액

doc.items.id(23) 

는 찾기를 사용하거나 findOne 작동하지만 더 많은 코드를 포함하고 이해하기 더 어려운 것입니다.

+0

당신은 이미 ls라고 가정하고 있습니다. – lostintranslation