2011-09-27 6 views
2

私は、このビューをフィルタリングする必要があります。複合キーでどのようにフィルタリングしますか?

function (doc) { 
    if (doc.doc_type == 'asd'){ 
     emit([doc.date, doc.string_key_0, doc.string_key_1], doc.list_field); 
    }; 
} 

私は:

key_filter_0 = ['START_TIME', 'STRING0', 'STRING1'] 
key_filter_1 = ['END_TIME', 'STRING0', 'STRING1'] 
VIEW[key_filter_0:key_filter_1] 

だけSTART_TIMEEND_TIMEでろ過ビュー。それはちょうどSTRING0/STRING1のキーフィルタを無視しました。

答えて

1

CouchDBには「キーフィルタ」はありません。

ビューに表示されるすべてのアイテムは、そのキーでソートされ、特定の開始キーと終了キーの間のすべてのアイテムを見つけることができます。あなたの場合、アイテムは最初に日付でソートされ、次にstring_key_0、次にstring_key_1でソートされます。

2番目のアイテムが「STRING0」、3番目のアイテムが「STRING1」の「START_TIME」と「END_TIME」の間のアイテムしか表示されないと思われたようですが、これはCouchDBの表示の仕方ではありません。それらは1次元のアイテムリストで、キー全体でソートされています。

+0

こんにちは、私はフィルタを必要とする場合、私は解決策を与える、私は[doc.string_key_0、doc.string_key_1、doc.date]のキーを変更し、[string_0、string_1、date_start/end]日付でのみ始まります。私は始まります= ['a'、 'a'、date_start]、終了= [{}、{}、date_end]この仕事:D 私の質問を読んでいただきありがとうございます。 – bl4ckb1rd

+0

その範囲には['b'、a '、date_start](他の値の中でも)が含まれます。それはあなたが欲しいものですか? startkeyとendkeyの個々の項目をフィルタリングすることはできません。すべての値は2つのキーの間でしか取得できません。 –

+0

こんにちは、今日の仕事をしないで... 2つの最初のキーは:はい私はより多くのビューを作成し、フィルタに応じて必要なビューを使用します。 – bl4ckb1rd

関連する問題