0

저는 MongoDB와 Mongoose를 처음 접했습니다. 현재 클라이언트에있는 계정 배열을 포함하는 클라이언트 컬렉션이있는 응용 프로그램을 구축하고 있습니다.다중 서브 문서를 기반으로하는 MongoDB/Mongoose 쿼리

나는 클라이언트에있는 계정의 특성을 기반으로 컬렉션을 쿼리하고 싶습니다.

  • 하여 clientType : "표준"
  • 는 두 개의 계정이 있습니다
    • ACCOUNTTYPE "FML을", 밸런스 : $ 하였다 3000
    • ACCOUNTTYPE 예를 들어, I는 클라이언트를 반환해야 "OMG", 밸런스 : $ LT 아래 3000

는 샘플 문서는 다음과 같습니다

,
{ 
    clientDetails: { 
     cardNumber: "", 
     firstName: "Bob", 
     lastName: "Dole", 
     clientType: "Standard" 
    }, 
    accounts: [ 
     { 
      accountNumber: "123", 
      accountType: "FML", 
      balance: 4000.00 
     }, 
     { 
      accountNumber: "234", 
      accountType: "OMG", 
      balance: 2000 
     } 
    ] 
} 

는 지금까지, 나는 단지 accountTypes [ "FML", "OMG]로하여 clientType의 클라이언트"표준 "을 얻을 수있는 쿼리를 작성하는하지만 지정하는 방법을 알아낼 수있는 방법을 알아 냈어요 특정 accountTypes의 잔액 조건

ClientModel 
    .find({ 
     "clientDetails.clientType": "Standard", 
     "accounts.accountType": { $all ["FML", "OMG"] 
    }) 
    .then(
     function(){ //etc..}, 
     function(err){ //etc...} 
    ); 

답변

1

당신은 $elemMatch으로 $all를 사용할 수 있습니다.

ClientModel 
    .find({ 
     "clientDetails.clientType": "Standard", 
     "accounts": 
      { 
      $all: [ 
        { "$elemMatch" : { accountType: "FML", balance: { $gt: 3000} } }, 
        { "$elemMatch" : { accountType: "OMG", balance: { $lt: 3000} } } 
       ] 
      } 
    }) 
    .then(
     function(){ //etc..}, 
     function(err){ //etc...} 
    ); 
+0

이 방법은 훌륭했습니다. 고맙습니다! 나는 많은 고객이 있을지도 모른다고 언급하는 것을 잊었다. 해당 조건과 일치하지 않는 계정을 필터링 할 수 있습니까? – chrisk

+1

Np. 나는 당신이 정규적인 질문으로 할 수 있다고 생각하지 않는다. 집계 파이프 라인을 사용해야 할 수도 있습니다. 도움이되는지 확인하십시오. http://stackoverflow.com/questions/15117030/how-to-filter-array-in-subdocument-with-mongodb – Veeram

+0

도움을 주셔서 감사합니다. 나는 한번 살펴 보겠다. – chrisk

관련 문제