在couchdb中映射和减少查询

时间:2012-03-24 07:53:03

标签: couchdb

我是新手写的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 个答案:

答案 0 :(得分:1)

你可以这样改变你的观点:

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

然后要求

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

然后在结果列表中包含doc.user =“someName”的所有文档,无论类型和类别

如果您需要更具体的信息,可以为通话添加其他条件:

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

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

但你必须使用相同的顺序(必须从左到右填充关键字段)

如果你需要另一个订单(只查找类型),你必须在同一个函数(或另一个函数)中用另一个订单进行第二次发射。

只有在给出孔键的情况下才能同时询问两个键。那么你必须用body

调用一个视图py POST

{keys = [[“Science”,“A”,“John”],[“Science”,“A”,“Joe”]}}