0

次の形式の日付キーを使用して、couchdb ドキュメントを取得しようとしています yyyy mm dd

私は、couchdb-python のビューを使用して、日付の範囲を取得できるようにしたいと考えています。curl を使用して動作させることができます。例えば:

curl -X GET mylocation:5984/small/_design/Common/_view/date?startkey='"2012%2006%2004"'\&endkey='"2012%2006%2006"'

ただし、Python で view メソッドを使用すると、たとえば

a=ui.db.view(docname, startkey='"2012%2006%2004"', endkey='"2012%2006%2006"')
a.rows

何も生成しません。私はもう試した:

  1. startkey のみを使用 --works

  2. Endkey だけでは動作しません。

  3. キーを「yy」、「mm​​」、「dd」の形式の複合キーに変更しました

次に、次のように取得しようとしました。

a=ui.db.view(docname, startkey='\["12","06","04"\]', endkey='\["12","06","06"\]')
a.rows

繰り返しますが、startkey 自体は機能しますが、endkey は使用できません。これは、curl でも正常に機能します。たとえば、次のようになります。

curl -X GET mylocation:5984/small/_design/Common/_view/date?startkey='\["12","06","04"\]'&endkey='\["12","06","06"\]'

次に、キーを文字列ではなく整数に変更しました。ここでも、startkey を使用するものはすべて機能し、endkey を使用するものはすべて機能しません。

最終的にキーを整数の 1 から 10 に変更しましたが、まだ endkey で何もできません。

私はcouchdb-pythonバージョン0.8を使用しています。これをeric4内でデバッグしています(それが問題になる可能性がありますか?)

4

1 に答える 1

0

ビュー呼び出しで startkey/endkey クエリ パラメーターを明示的に JSON にエンコードする必要はありません。CouchDB では、デフォルトで有効な JSON 値が必要です。たとえば、ビューが ["yy", "mm", "dd"] の形式で複合キーを返す場合、次はビュー リクエストになります。

a = ui.db.view(docname, startkey=["12","06","04"], endkey=["12","06","06"])

startkey と endkey にはリスト型の値があることに注意してください - ビューのファンクションキーと同じです。

curl リクエストについて: db.view() リクエストと同等ではありません: 一重引用符はシェル文字列のエスケープとして機能しますが、リクエストでは渡されません。したがって、curl から CouchDB への実際のリクエストは

mylocation:5984/small/_design/Common/_view/date?startkey=["12","06","04"]&endkey=["12","06","06"]

JSON 文字列は二重引用符で囲む必要があるため、invalid_json エラー応答がない限り。

とにかく、CouchDB のログ (info レベルで十分です) を調べて、Python プログラムと curl から CouchDB への実際のリクエストを比較することができます。それらは状況によって異なります。

于 2012-09-07T14:25:19.283 に答える