2016-05-26 6 views
0

私はビューを持っていますが、以下のようにビューの結果から重複したドキュメントを持っていました。どのようにして重複した結果を得て、ユニークなものを得ることができますか?事前に結果から重複レコードをクリアする方法はありますか?

{ 
"total_rows": 9, 
"offset": 0, 
"rows": [ 

     { 
      "id": "xxxx", 
      "key": "12345", 
      "value": { 
      "_id": "abc123", 
      "_rev": "4-8db4da81d1e20afcea0a328fb16e7ec8", 
       "field1": "abc", 
       "field2": "dfr" 
      }, 

      { 
       "id": "xxxx", 
       "key": "12345", 
       "value": { 
        "_id": "abc123", 
        "_rev": "4-8db4da81d1e20afcea0a328fb16e7ec8", 
        "field1": "abc", 
        "field2": "dfr" 
       }, 
      ] 
     } 

をありがとうビューは によって呼び出さ

function(doc) { 
if(doc){ 
    for (var i in doc.item){ 
      emit(doc.item[i].key,doc); 
     } 
    } 
} 

このような図である...._ビュー/複製する?キー= "12345"

私は常にときに、このエラーが発生しました"エラー": "reduce_overflow_error"、 "reason": "出力を減らす必要があります。 を急速に縮小する必要があります。

function (keys, values, rereduce) { 
var uniqueKey = []; 
var newValues = []; 
for (var i=0; i<values.length; i++) { 
    if (uniqueKey.indexOf(values[i]._id)==-1) { 
     uniqueKey.push(values[i]._id); 
     newValues.push(values[i]); 
    } 
} 
return newValues; 

}

+0

送信する前にデータを準備するコードを表示してください。 –

+0

こんにちはEmre、ありがとう、私はコードを持っていない、私はちょうどマップを使用したり、特定のキーと同じ他の文書を取り除くcouchdbの機能を減らしたい – Jamesjin

答えて

0

問題があなたのマップ機能である:あなたが同じドキュメントを複数回発し、それを行うことで

function(doc) { 
if(doc){ 
    for (var i in doc.item){ 
      emit(doc.item[i].key,doc); 
     } 
    } 
} 

、したがって、それはあなたが重複した書類を持っている驚きとして来るべきではありませんあなたのビューの結果に。

function(doc) { 
    if(doc.item) { 
    emit(doc.item, null) 
    }  
} 

はまた、私は emit(doc.item, null)なく emit(doc.item, doc)を行うことに注意してください:あなたが重複することなく、文書のすべてのアイテムを返すようにしたい場合は、そのような単純な何かを行うことができます。ドキュメントを発行するのは悪い習慣ですが、代わりにオプション include_docs=trueでビューを照会する必要があります。それ以外の場合、ビューのインデックスはデータベースと同じサイズになります。

関連する問題