Documents(伪,rev和id省略):
{
"type": 1,
"username": "aron",
"data": { ... }
}
{
"type": 1,
"username": "bob",
"data": { ... }
}
{
"type": 1,
"username": "steve",
"data": { ... }
}
{
"type": 1,
"username": "steve",
"data": { ... }
}
{
"type": 2,
"username": "steve",
"data": { ... }
}
{
"type": 3,
"username": "steve",
"data": { ... }
}
{
"type": 3,
"username": "steve",
"data": { ... }
}
{
"type": 3,
"username": "steve",
"data": { ... }
}
我想知道,有多少1/2/3型史蒂夫文件。
查看:
count: {
map: function (doc) {
emit([doc.username, doc.type], 1);
}
reduce: function (key, values, rereduce) {
return sum(values);
}
}
现在我要求
/database/_design/myDesign/_view/count?key=["steve",1] // result: 2
/database/_design/myDesign/_view/count?key=["steve",2] // result: 1
/database/_design/myDesign/_view/count?key=["steve",3] // result: 3
效果非常好。
对于聪明的事情,我想知道我是否可以在一个视图中查询它?
有没有办法在一个视图中统计未知类型的文档数量?
答案 0 :(得分:5)
您可以使用这样的正文发布到您的视图;
{"keys":[["steve",1], ["steve",2]]}
另外,尝试使用“_sum”作为reduce函数,它将在Erlang中本机运行,并且应该比在Javascript中运行快几倍。
答案 1 :(得分:4)
您可以执行范围查询来实现此目的:
.../count?startkey=["steve",1]&endkey=["steve",3]&group=true&reduce=true
这将为["steve",1]
和["steve",3]
之间的每个密钥提取一行。您可以根据您的类型实际调整值0
和3
。例如,如果您的类型可以是任何标量值,则可以使用["steve",null]
和["steve",{}]
作为范围边界。