couchdb 视图操作_CouchDB在同一视图中排序和过滤

为了在一个键中发出多个数据,你需要在

Complex Keys上读。你很可能最终会发现emit()是一个由类别和标签组成的数组的键。例如…

function(doc) {

for(var i = 0; i < doc.tags.length; i++)

emit([doc.category,doc.tags[i]],doc);

}

现在当你查询?key = [“fun”,“couchdb”]你会得到所有的项目在乐趣类别标记为“couchdb”。或者如果你想要有趣类别中的所有项目,不管他们的标签,那么你可以查询一个范围:?startkey = [“fun”]& endkey = [“fun”,{}]。只要记住,如果你的项目有多个标签,你会在结果中多次获取(因为你每个标签发出一次doc文档)。

要按照评级,日期和标题进行排序的额外步骤,您将向数组中添加两个元素:一个整数,以及排名,日期或标题。记住,你可以为每个map函数emit()多次。地图功能示例…

function(doc) {

for(var i = 0; i < doc.tags.length; i++)

{

emit([doc.category,doc.tags[i],doc.ranking],doc);

emit([doc.category,1,doc.title],2,doc.date],doc);

}

}

现在你的关键结构是:[“category”,“tag”,0 … 2,rank / title / date]

你基本上将所有的排名分为0以下,标题在1以下,日期在2以下。当然,你传输了大量的数据,所以你可以将每个分组放在一个单独的视图中的设计文档,或者只返回文档的_id作为值(emit([…],doc._id);)。

使用“couchdb”标记(升序)获取“fun”类别中的所有内容:

?startkey=["fun","couchdb"]&endkey=["fun","couchdb",{},{}]

使用“couchdb”标记(降序)获取“fun”类别中的所有内容:

?startkey=["fun",{}]&endkey=["fun","couchdb"]&descending=true

只使用couchdb标签(升序)获得有趣类别中的排名:

?startkey = [“fun”,“couchdb”,0]& endkey = [“fun”,“couchdb”,0,{}]

只有“couchdb”标签(降序)的“有趣”类别中获得排名:

?startkey=["fun",0]&descending=true

我希望这有帮助。复杂键开始真正显示Map / Reduce在切片和切割数据方面的强大。

干杯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值