2014-07-19 5 views
1

으로 배열 필드에서 특정 개체를 얻는 방법 : 사용자와 비영리의 ID이 같은 스키마를 감안할 때 몽구스

UserSchema = new Schema({ 
    name: String, 
    donations: [ 
    { 
     amount: Number, 
     charity: { 
     type: Schema.Types.ObjectId, 
     ref: 'charity' 
     } 
    } 
    ] 
}); 

나는 (문자열)을하고 난 금액을 취득 할 사용자가 기증했다. 임 lodash로이 쿼리를 사용하여 : 여기

User.findOne({ 
    _id: userId 
}, function(err, user) { 
    var amount = _.find(user.donations, {charity: charityId}); 
    console.log("the amount is: ", amount); 
}); 

양이 그것은 또한 내가 lodash를 사용할 필요가 없습니다 추측 메신저 안해도 undefined를 반환합니다. 특정 금액 인 userIdcharityId을 기증받은 금액을 얻는 올바른 방법은 무엇입니까? 이 작업을 수행 할 수

이 가능한 중복 꽤 유사하다
+0

및 자선 객체 아마 때문에 작업을 나던 그리고 문자열 ID를 검색하는 메신저 – wemadeit

+0

좋아, 나는 당신이'_.find'에'user.shares'를 넘겨주고 있기 때문에 당신이 뭘 하려는지 확실하지 않지만'shares'는 스키마에 나타나지 않습니다 . 그게'user.donations'일까요? – JohnnyHK

+1

그래서 참조 된 질문이 도움이되지 않습니까? 요점은 노드 클라이언트 코드를 필터링하는 대신 MongoDB 서버에서이를 처리 할 수 ​​있다는 것입니다. –

답변

2

나는대로 lodash 사용하지 않고, 링크 : 내가 선택한 후 필터링하고 있기 때문에 정말

User.findOne({ 
    _id: userId, 
    'donations.charity': charityId 
}, { 
    'donations.$': 1 
}, function(err, user) { 
    console.log("the amount is: ", user.donations[0].amount); 
}); 
+0

은 this -> console.log에서 [0]입니다 ("금액은 :", user.donations [0] .amount); '기부금 때문에. $': 1? – wemadeit

+0

@ user3854950 오른쪽, ['$'] (http://docs.mongodb.org/manual/reference/operator/projection/positional/#proj._S_)는 배열 필드가 첫 번째로 일치하는 요소 만 포함하도록 제한합니다. – JohnnyHK

+0

굉장합니다. 감사! – wemadeit