我是新手写的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的数据。请提供指导以实现。
感谢。
答案 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”]}}