2016-09-22 85 views
0

我使用cloudantDB,想查詢視圖看起來像這樣couchDB-在視圖

function (doc) { if(doc.name !== undefined){ emit([doc.name, doc.age], doc); }複雜的查詢

什麼應該是正確的方式來獲得的結果,如果我有名字的列表(我將使用選項'keys = []'爲它)和一系列的年齡(應該使用startkey和endkey)

例如:我想獲得名爲「john」或「mark」或「約瑟夫」或年齡限制20之間「桑託什」和騙30.

如果我去的名單,查詢應該是鍵= [「約翰」,...] ,如果我去了年齡查詢應該使用startkey和endkey

我想兩者都做:)

由於

回答

1

不幸的是,你不能這樣做。使用參數查詢具有指定鍵的文檔。例如,你不僅可以發送鍵= 「約翰」, 「標記」] & startkey = null,則20] & endkey = [{},30]。此查詢將僅和只有返回名稱爲約翰標記文檔與空年齡。

在你的問題,你指定的CouchDB的,但如果你使用的是Cloudant,index query可能對你有意思。

你可以有這樣的事情:

{ 
    "selector": { 
    "$and": [ 
     { 
     "name": { 
      "$in":["Mark","John"] 
     } 
     }, 
     { 
     "year": { 
      "$gt": 20, 
      "$lt": 30 
     } 
     } 
    ] 
    }, 
    "fields": [ 
    "name", 
    "age" 
    ] 
} 

至於CouchDB的,你需要或者分離您的請求(年齡1個請求,1人),或者你做本地的過濾。

+0

亞歷克西斯您好,感謝您的答覆。我正在使用cloudant,但這篇文章說索引有200的限制,然後發送剩餘的書籤。 http://www.ibm.com/developerworks/cloud/library/cl-cloudant-best-practices-multi-tenant-service-trs/我在我的分貝 –

+0

近100K的文檔,具有按要求的200個文件限制不在整個數據庫上。這意味着如果你想查詢總共400個文件,它會帶你2個請求。 –

+0

是的,你是對的。在我的情況下,我有100k文檔。即使其中一半滿足查詢,我也不得不提出太多請求 –