0

まだできていないクエリを作成しようとしています。私の常設ビュー機能は次のとおりです。

function(doc) { 
    if('llweb_result' in doc){
         for(i in doc.llweb_result){ 
             emit(doc.llweb_result[i].llweb_result, doc);
         }
    }
}

キーに応じて、結果をフィルタリングします。ですから、この鍵が必要です。次に、ご覧のとおり、for ループがあります。これにより、結果に同一のタプルが発生します。ただし、すべてをチェックするには、この for ループも実行する必要があります。ここでは、同一のタプルを削除する方法を知りたいだけですか?

私はcouchdb-pythonを使用しています。私の関連コードは次のとおりです。

result = {}
result['0'] = self.dns_db.view('llweb/llweb_filter', None, key=0, limit = amount, startkey_docid = '000000052130')
result['1'] = self.dns_db.view('llweb/llweb_filter', None, key=1, limit=amount)
result['2'] = self.dns_db.view('llweb/llweb_filter', None, key=2, limit=amount)

キー値からわかるように、キーには 3 つの異なるタイプがあります。[doc._id, llweb_result] で「キー」を拡張できると思いました。[*, 2] のようなキーが必要ですが、それが可能かどうかわかりません。次に、reduce 関数を使用してそれらをグループ化します。これは間違いなく機能しますが、現時点では [0,1,2] の値のみを使用して選択クエリを作成する方法が問題です。

16.08.12 で編集

couchdb レコードの「llweb_result」プロパティの例:

"llweb_result": {
   "1": {
       "ip": "66.233.123.15",
       "domain": "domain.com",
       "llweb_result": 1
   },
   "0": {
       "ip": "66.235.132.118",
       "domain": "domain.com',
       "llweb_result": 1
   }
}

1 つのレコードには 1 つのドメイン名しかありませんが、複数の IP が存在する可能性があります。レコードを dns パケットと見なすことができます。

llweb_result (0,1,2) に応じてレコードをグループ化したい。それらに対して選択クエリを実行します(たとえば、「1」を含むレコードをフェッチします)。ただし、上記の例では、結果に 2 つの同一のタプルが含まれます。

どんな助けでも感謝します。

4

2 に答える 2

1

doc.llweb_result[i].llweb_resultクエリ結果で重複したペアが得られた場合は、各ドキュメントに重複した値があることを意味します。

ビュー関数を変更して、これらの値の 1 つだけを (キーとして) 発行することができます。これを行う1つの方法は次のとおりです。

function(doc) {
    if ('llweb_result' in doc) {
         distinct_values = {};
         for (var i in doc.llweb_result) {
             distinct_values[doc.llweb_result[i].llweb_result] = true;
         }
         for(var dv in distinct_values) {
             emit(dv, doc);
         }
    }
}
于 2012-08-15T00:26:29.313 に答える
0

私は何も知りませんが、CouchDB は配列内couchdb-pythonの単一keyまたは複数をサポートしています。keysしたがって、パラメータとして指定couchdb-pythonする方法については、ドキュメントを参照してkeys=[0,1,2]ください。

一意の値だけを取得することに関しては、 CouchDB The Definitive Guide のこのセクションを参照してください。基本的に NOOP 削減を追加する方法が説明されているので、使用できます。group=true

于 2012-08-15T01:16:57.403 に答える