2011-10-26 2 views
0

CouchDBドキュメントにはキーが添付されているようです。あなたが得るすべてであるようにしかし、どうやらそのキーは、常に文書IDと同じである明示的にCouchDBドキュメントキーを設定する

wget "http://localhost:5984/monitor20n/_all_docs?startkey=1111&endkey=2222 

:単一のドキュメントを取得するときには表示されませんが、次のような文書の範囲を取得するためにそれらを使用することができますこのようなもの

{"total_rows":14269,"offset":0,"rows":[ 
{"id":"128127896626798592","key":"128127896626798592","value":{"rev":"1-4e07e2c4b4eddfad5846ddf905337197"}}, 
{"id":"128128575021907970","key":"128128575021907970","value":{"rev":"1-43d983af1e837a4415b6167cae3b5de8"}}, 
... and so on }} 

(ここではkey == idを参照)。しかし、より複雑な相互作用を可能にするベクトルを含む、より複雑なキーをビューで使用することができます。少なくとも、ビューのキーを設定して、文書IDを検索せずに検索するものを事前に設定できるようにします。 質問は次のとおりです。文書を作成するときにこれらのキーを設定できますか?それとも、それを作成した後ですか? 明白な回避策は、この

function (doc) { 
    emit(doc.key,doc) 
} 

のようなビューを作成することですが、私は同じ効果を得るためのより直接的な方法がありますかどうかを知りたいと思います。

答えて

4

キーはCouchDBビューの重要な部分です。ビューでは、キーはドキュメントIDである必要はありません。しかし、キーを生成する唯一の方法は、ビュー内からemit関数を使用することです。自動的にキーになるプロパティは設定できません。

_all_docsはビルトインビューのように考えてください。一貫性を保つために、通常のビューと同じ出力を行い、idをキーとして使用します。しかし、_all_docsビューを変更することはできません。ドキュメントを保存するときに独自の_idを指定したい場合は、それがキーになります。 '_all_docs'ビューにカスタムキーが必要な場合は、

{_id: 'Sample1'}、{_id: 'My2'}のようなドキュメントを作成できます。 '_all_docs'ビューをリクエストすると、 {"total_rows":2、 "offset":0、 "rows":[ {"id": "Sample1"、 "key" "My2"、 "My2"、 "value":{"rev": "Sample1"、 "value":{"rev": "1-4e07e2c4b4eddfad5846ddf905337197"}}、 {"id"そう}}

にここ1-43d983af1e837a4415b6167cae3b5de8" }}、 ...とは、文書IDを作るかについてのリンクです:

http://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields

それが明示的に言うことはありませんが、することはできませんオブジェクトまたは配列をDocumentIDとして使用します。

希望に役立ちます。

+0

だから私は別の回避策を使用する実際のキーの周りにヒューリスティックなルールを使用してIDを生成すると思います。たとえば、日付の範囲で検索する場合は日付を照合します。 – jjmerelo

+0

あなたは何をしようとしているのかについてより具体的な質問をしたいと思うかもしれません。ここでは良い例です:http://stackoverflow.com/questions/3079040/range-keys-in-couchdb-views –