2017-08-02 1 views
1

私は以下の要件を満たしています。 以下の配列要素では、LoanAmountの値を選択して比較する必要があります。前の記事では、以下の解決策が挙げられています。Cloudant Selector配列内の特定の要素を取得するクエリ

{ 
    "_id": "65c5e4c917781f7365f4d814f6e1665f", 
    "_rev": "2-73615006996721fef9507c2d1dacd184", 
    "userprofile": { 
      "name": "tom", 
      "age": 30, 
      "employer": "Microsoft"    
       }, 
    "loansBorrowed": [{"loanamount": 5000, 
        "loandate": "01/01/2001", 
        "repaymentdate": "01/01/2001", 
        "rateofinterest": 5.6, 
        "activeStatus": true, 
        "penalty": { 
         "penalty-amount": 500, 
         "reasonforPenalty": "Exceeded the date by 10 days"   
        } 
        }, 
        { 
         "loanamount": 3000, 
         "loandate": "01/01/2001", 
         "repaymentdate": "01/01/2001", 
         "rateofinterest": 5.6, 
         "activeStatus": true, 
         "penalty": { 
         "penalty-amount": 400, 
         "reasonforPenalty": "Exceeded the date by 10 days" 
         } 
        }, 
        { 
         "loanamount": 2000, 
         "loandate": "01/01/2001", 
         "repaymentdate": "01/01/2001", 
         "rateofinterest": 5.6, 
         "activeStatus": true, 
         "penalty": { 
         "penalty-amount": 500, 
         "reasonforPenalty": "Exceeded the date by 10 days" 
         } 
        } 
        ] 
       } 

Index: 
    { 
     "index": { 
       "fields": [{ 
        "name": "loansBorrowed.[].loanamount", 
        "type":"number"    
       }],    
       "type": "json" 
      } 

セレクタクエリ:

{"selector": { 
     "loansBorrowed": { 
      "$elemMatch": { 
       "loanamount": 3000 
      } 
     } 
    } 
} 

しかし、そのインデックスとセレクタクエリは、特定のクエリのすべてのレコードを提供する代わりに、私に3000 持つレコードのみを提供している唯一の特定の要素を取得する方法を提案してください。アレイブロックの内側にある。

+0

すべてのレコードが返されるたびに、3000のloadamoutを含むsubloans要素がないことを確認してください。 $ elemMatchは一致した配列を取得しませんでしたので、ドキュメント全体が返されました。 –

+1

非常に正確なdupe:https://stackoverflow.com/questions/33262573/cloudant-selector-query – xpqz

+0

この場合、OPは具体的には配列内の特定の要素を返すことだけを求めています。それは他の郵便でも尋ねられましたが、実際には答えられませんでした。 – markwatsonatx

答えて

0

配列内の特定の項目のみを返すことはできないと思います。ビューを使って同様のことを達成できます。

{ 
    "_id": "_design/loans", 
    "_rev": "1-a115abe01632dd43ee1d0d10546b737d", 
    "views": { 
    "by_amount": { 
     "map": "function (doc) {\n if (doc.loansBorrowed) {\n for (var i=0; i<doc.loansBorrowed.length; i++) {\n  emit(doc.loansBorrowed[i].loanamount, {userprofile: doc.userprofile, loan:doc.loansBorrowed[i]});\n }\n }\n}" 
    } 
    }, 
    "language": "javascript" 
} 

これはby_amountというビューを作成します。

function (doc) { 
    if (doc.loansBorrowed) { 
    for (var i=0; i<doc.loansBorrowed.length; i++) { 
     emit(doc.loansBorrowed[i].loanamount, {userprofile: doc.userprofile, loan:doc.loansBorrowed[i]}); 
    } 
    } 
} 

ここでは、ローン金額をキーとして使用しています。これで、あなたはローン額で照会します。値は返すものであれば何でもかまいません。この場合、私はユーザーのプロフィールとローンを含む文書を返送しています。

あなたはそのようにように、このビューを照会することができます

次のようなものになり
https://xxx.cloudant.com/YOUR_DB/_design/loans/_view/by_amount?key=3000 

(注意:私は、それは複数のローンでどのように見えるかを示すために、3000の値を有する第2のローンを追加しました)

{ 
    "total_rows":6, 
    "offset":2, 
    "rows":[ 
     { 
     "id":"796a8954600cee9dbb9e0a4040593942", 
     "key":3000, 
     "value":{ 
      "userprofile":{ 
       "name":"tom", 
       "age":30, 
       "employer":"Microsoft" 
      }, 
      "loan":{ 
       "loanamount":3000, 
       "loandate":"01/01/2001", 
       "repaymentdate":"01/01/2001", 
       "rateofinterest":5.6, 
       "activeStatus":true, 
       "penalty":{ 
        "penalty-amount":400, 
        "reasonforPenalty":"Exceeded the date by 10 days" 
       } 
      } 
     } 
     }, 
     { 
     "id":"c93f52da36a51f0ddd75f5be381c916e", 
     "key":3000, 
     "value":{ 
      "userprofile":{ 
       "name":"joe", 
       "age":50, 
       "employer":"Google" 
      }, 
      "loan":{ 
       "loanamount":3000, 
       "loandate":"01/01/2001", 
       "repaymentdate":"01/01/2001", 
       "rateofinterest":5.6, 
       "activeStatus":true, 
       "penalty":{ 
        "penalty-amount":400, 
        "reasonforPenalty":"Exceeded the date by 10 days" 
       } 
      } 
     } 
     } 
    ] 
} 
+0

解決に感謝!!その作業!! – Divya

関連する問題