2015-10-21 58 views
8

我想使用選擇器使用cloudant db進行查詢,例如如下所示:用戶想要貸款數量超過一個數字,如何訪問雲數據選擇器中的數組以查找特定記錄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" 
      } 
     } 
     ] 
    } 

回答

11

如果使用默認Cloudant查詢索引(類型的文本,所有內容建立索引):

{ 
    "index": {}, 
    "type": "text" 
} 

則下面的查詢選擇應該努力找到如用loanamount> 1000的所有文件:

"loansBorrowed": { "$elemMatch": { "loanamount": { "$gt": 1000 } } } 

我不知道,你可以在一個陣列內鬨Cloudant查詢只指數嵌套的領域是這樣,如果你不需要「指標一切」的靈活性方法,您最好創建一個Cloudant搜索索引,它只索引您需要的特定字段。

+0

謝謝,它的工作 – vinSan

+0

爲我工作〜謝謝。 – HamasN

9

儘管Will的答案有效,但我想讓你知道,你還有其他處理數組的索引選項。該博客對各種折衷的細節(https://cloudant.com/blog/mango-json-vs-text-indexes/),但長話短說,我認爲這可能是您的最佳索引選項:

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

與威爾的索引一切辦法,在這裏你只索引一個,如果該字段包含數組,則還要索引數組中的每個元素。尤其對於大型數據集上的"type": "text"索引,指定要索引的字段將節省索引構建時間和存儲空間。需要注意的是指定字段必須使用以下格式在"fields":領域的文本索引:{"name": "fieldname", "type": "boolean,number, or string"}

所以那麼相應的Cloudant查詢"selector":語句應該是這樣的:

{ 
    "selector": { 
    "loansBorrowed": {"$elemMatch": {"loanamount": {"$gt": 4000}}} 
    }, 
    "fields": [ 
    "_id", 
    "userprofile.name", 
    "loansBorrowed" 
    ] 
} 

另外請注意,您不必包括"fields":作爲"selector":聲明的一部分,但我在這裏僅僅投影了JSON的某些部分。如果您從"selector":聲明中省略,則整個文檔將被退回。