2012-03-24 84 views
1

我是新手编写couchdb map并减少查询。我的一个要求是基于我们必须发布数据的一些密钥。如下所述,我写了“成功”。map and reduce queries in couchdb

function(doc) { 
emit([doc.type , doc.category, doc.user], doc); 

}

如果我们给像

http://localhost:5984/test/_design/myDesign/_view/myView?key=["Science","A","John"] 

那么该数据将被发射的三倍键的值。 但我的疑问是,如果我们为该视图提供一个键或两个键,如何获取数据。这意味着对于上述观点,如果用户提到了一个像doc.user这样的密钥,那么将基于这三个密钥来发射用户数据。还有一个疑问是,我们可以给一个键两个值吗? ?假设用户想通过使用相同的视图获取数据,用户名是JOHN或Joe。请提供指导来实现。

谢谢。

回答

1

你可以改变你的看法是这样的:

emit([doc.user, doc.type, doc.category], doc); 

然后索要

?startkey=["someName"]&endkey=["someName",{}] 

然后在resultlist是具有doc.user = “someName” 的所有文件,无论其类型和类别

如果您需要更具体的信息,您可以添加另一个标准给您的电话:

?startkey=["someName","someType"]&endkey=["someName","someType",{}] 

然后您将收到带有someName和someType的所有文档。

但是你必须用同样的顺序

(键字段必须从左至右填写)如果你需要另一种秩序(寻找仅类型),你必须做第二个发射具有其他命令在相同的功能(或在另一个功能)。

只有在给定的孔密钥的情况下才能同时询问两个密钥。那么你必须调用一个视图py POST与正文

{key = [[Science“,”A“,”John“],[”Science“,”A“,”Joe“]]
+0

感谢您的回复{keys = [[Science','A','John'],['Science','A','Joe']]}但它不起作用,您能否提供语法在同一时间访问同一个视图的两个值 – veerender 2012-03-26 13:19:44

+0

尝试用'keys'周围的引号。 有关更多详细信息,请参阅[文档](http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API#Fetch_Multiple_Documents_With_a_Single_Request)。 – 2013-02-10 08:40:15