我在获得在 CouchDB 1.01 中解决的看似相当简单的问题时遇到了一些问题。我的数据基本上是来自 30 多家诊所的药物日志,其中包含一些关于药物的基本数据和时间戳。我将一组相当普通的对象作为映射结果传递给伪形式的reduce:
Key:ClinicName, Value:{"vaccine":DrugType, "stamp":TimeStamp}
我的 reduce 函数的目的是允许快速参考分配的每种药物的数量。
地图
function(doc) {
if(doc.type=="dose"){
emit(doc.clinicName, {"vaccine":doc.vaccine,"stamp":doc.timestamp});
}
}
减少
function(keys, values){
var indexes = Object.keys(values);
var vCount = new Object;
for (var c in indexes){
var val = values[c]
var vname = val.vaccine
if(vCount.hasOwnProperty(vname)){
vCount[vname] = vCount[vname] + 1;
}
else{
vCount[vname] = 1;
}
}
return vCount;
}
当我使用 ?key= 一个特定的 ClinicName 只要descending=false 和group=true 时,这非常有效。一旦设置为真,我的结果就会在中途被切断。
两个问题:
- 为什么结果顺序对 reduce 函数很重要?关闭减少后,结果向前和向后是相同的。
- 我在某处读到,如果您的归约没有提供单个标量,那么您可能做错了。如果除此之外的奇怪行为是一种糟糕的方法,那么从日志样式数据源中呈现此类数据的正确方法是什么?