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