2016-09-22 45 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文档。即使其中一半满足查询,我也不得不提出太多请求 –