CouchDB1.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;
}
これは、descending=falseおよびgroup=trueである限り、?key=特定のClinicNameを使用している場合に完全に機能します。降順をtrueに設定するとすぐに、私の結果は途中で途切れます。
2つの質問:
- 結果の順序がreduce関数にとって重要なのはなぜですか?リデュースをオフにすると、結果は順方向と逆方向で同じになります。
- あなたの削減が単一のスカラーを提供しない場合、あなたはおそらくそれを間違っているとどこかで読んだでしょう。これ以外の奇妙な振る舞いが不十分なアプローチである場合、ログスタイルのデータソースからこの種のデータを提示する正しい方法は何ですか?