0

我是MongoDB和Mongoose的全新軟件。我目前正在構建一個具有客戶端集合的應用程序,其中包含客戶端擁有的一組帳戶。基於多個子文檔的MongoDB/Mongoose查詢

我想根據客戶的帳戶的具體情況查詢集合。例如,我需要返回客戶端是:

  • clientType: 「標準」
  • 有兩個帳戶:
    • ACCOUNTTYPE: 「臥槽」,餘額:$ 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 
     } 
    ] 
} 

到目前爲止,我只找到了如何建立一個查詢,可以得到clientType的客戶「標準」與accountTypes [「臥槽」,「OMG]但我無法弄清楚如何指定特定accountTypes的平衡條件。

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

回答

1

您可以使用$all$elemMatch

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