0

私はMongoDBとMongooseの新機能です。私は現在、クライアントが持つアカウントの配列を含むクライアントコレクションを持つアプリケーションを構築しています。複数のサブ文書に基づくMongoDB/Mongooseクエリ

私はクライアントが持っているアカウントの詳細に基づいてコレクションを照会したいと思います。

  • クライアントタイプ: "標準"
  • は、2つのアカウントを持っている:
    • accountType: "FML"、バランス:$ GTの3000
    • accountType例えば、私は、あるクライアントを返す必要があります: "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 
     } 
    ] 
} 

これまでのところ、accountType ["FML"、 "OMG]でclientType" Standard "のクライアントを取得できるクエリを作成する方法しか分かりませんでしたが、特定の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

関連する問題