我正在寻找有关couchdb视图问题的一般解决方案。
例如,有一个这样的视图结果:
{"total_rows":4,"offset":0,"rows":[
{"id":"1","key":["imported","1"],"value":null},
{"id":"2","key":["imported","2"],"value":null},
{"id":"3","key":["imported","3"],"value":null},
{"id":"4","key":["mapped","4"],"value":null},
{"id":"5,"key":["mapped","5"],"value":null}
]
1)如果我只想选择“导入”文档,我会使用它:
view?startkey=["imported"]&endkey=["imported",{}]
2)如果我想选择ID较高的所有导入文档,则为2:
view?startkey=["imported",2]&endkey=["imported",{}]
3)如果我想选择ID介于2和4之间的所有导入文档:
view?startkey=["imported",2]&endkey=["imported",4]
我的任务是:如何选择身份在2到4之间的所有行?
答案 0 :(得分:2)
您可以尝试扩展上面的解决方案,但是在键前加上一个“emit index”标志,如下所示:
map: function (doc) {
emit ([0, doc.number, doc.category]); // direct order
emit ([1, doc.category, doc.number]); // reverse order
}
所以你可以用
来请求它们view?startkey=[0, 2]&endkey=[0, 4, {}]
或
view?startkey=[1, 'imported', 2]&endkey=[1, 'imported', 4]
但无论如何,2种不同的观点会更好。
答案 1 :(得分:1)
我刚才遇到了同样的问题所以我会解释我的解决方案。在任何地图功能内,您可以进行多次emit()
次呼叫。您的案例中的地图功能可能如下所示:
function(doc) {
emit([doc.number, doc.category], null);
emit([doc.category, doc.number], null);
}
您还可以使用?include_docs=true
从任何查询中取回文档。然后你的查询返回第2到第4行将是
view?startkey=[2]&endkey=[4,{}]
查看排序规则