2016-04-10 21 views
2

私は、日付と名前のフィールドを持つ文書CouchDBの検索

{ 
 
    date: '2015-07-16T09:18:36.660Z', 
 
    name: 'australia' 
 
}, 
 
{ 
 
    date: '2015-08-12T19:11:11.320Z', 
 
    name: 'austria' 
 
}, 
 
{ 
 
    date: '2016-01-14T12:59:26.120Z', 
 
    name: 'italy' 
 
}, 
 
{ 
 
    date: '2019-04-28T17:42:10.520Z', 
 
    name: 'spain' 
 
} 
 

を持つマイマップ機能この

function(doc) { 
 
    emit(doc.date, doc); 
 
}
のように見えます

?startkey = "2015-01-01T00:00:00Z" & endkey = "2017-09-01T00:00:00Z"で日付範囲を指定できますが正常に動作しますが、指定した範囲内でキーワードで検索したいあなたが何かのように、あなたのビュー関数を変更する必要がある日付範囲、私は「AU」で始まる名前を持つすべてのアイテムが必要なのは、上記の範囲に追加しましょう

答えて

0

function(doc) { 
    emit([doc.date, doc.name], null); 
} 

次に、あなたのような何かを行うことができ、

startkey=["2015-01-01T00:00:00Z,"au"]&endkey=["2017-09-01T00:00:00Z","au\ufff0"] 

もちろん、json-encode thキー値をoseします。

+0

CouchDBはキーを左から右に一致させるので、これはうまくいかないので、2番目のキー "au"はスキップされます。日付範囲内にあればどの国も一致します。 – 7ictor

1

CouchDBの現在のバージョン1.6ではこれが可能ではないと私は考えています。

blog postに記載されているJamie Talbotのパッチと、CouchDB's JIRAのディスカッションがあります。最終的な解決策は2.0のみで、あなたが求めているものが達成されます。

さらに、CouchDB 2.0用にも使用されるCloudant Queryという公式言語として作成されたCouchDB用の新しいquery languageがあります。

つまり、CloudantやCouchDB 2.0を使用している場合は、はるかに良いクエリ言語を使用することをお勧めします。

まず、POST_indexエンドポイントにインデックスの説明をINGの、インデックスを作成する必要があります。

{ 
    "index": { 
    "fields": [ 
     "date", 
     "name" 
    ] 
    }, 
    "type": "json" 
} 

次に、あなたはPOST_findエンドポイントにJSONをINGの、新しいクエリAPIを使用することができます。

{ 
    "selector": { 
    "date": { 
     "$gt": "2015-01-01T00:00:00Z", 
     "$lt": "2017-09-01T00:00:00Z" 
    }, 
    "name": { 
     "$gt": "au", 
     "$lt": "au\ufff0" 
    } 
    } 
} 

をそれは暗黙のうちにdate周り$andnameセレクタを使用している:あなたが尋ねた基準に例。上記のリンクで詳細なドキュメントを見つけることができます。

関連する問題