記事を保存するcouchdbデータベースがあります。
記事の作成日を保存するのを忘れましcreated_at
た。updated_at
最も古い記事、つまり最初に作成された記事を取得したいと思います。
updated_at
記事にはリビジョンがあるので、すべての記事の最初のリビジョンごとにクエリを実行して、最初の記事がいつ作成されたかを推測できると思いますか?
couchdb でそのようなクエリを作成することは可能ですか?
記事を保存するcouchdbデータベースがあります。
記事の作成日を保存するのを忘れましcreated_at
た。updated_at
最も古い記事、つまり最初に作成された記事を取得したいと思います。
updated_at
記事にはリビジョンがあるので、すべての記事の最初のリビジョンごとにクエリを実行して、最初の記事がいつ作成されたかを推測できると思いますか?
couchdb でそのようなクエリを作成することは可能ですか?
いいえ、CouchDB のリビジョンはバージョン管理システムと同じリビジョンではありません。この_rev
フィールドは、書き込みの競合を解決し、結果整合性を達成するのに役立つMVCCトークンです。CouchDB が以前のドキュメントのリビジョンを保存していることは事実ですが、ビューやその他の設計機能を介してそれらにアクセスすることはできず、次のデータベースの圧縮時にも削除され、その数は/db/_revs_limitオプションによって制限されます。
フィールドの以前の値を復元updated_at
して、最も古い値をフィールドとして設定することができcreated_at
ます。それは単にchairdb-pythonで行うことができます:
import couchdb
server = couchdb.Server()
db = server['my_db']
for idx in db:
doc = db[idx]
for olddoc in db.revisions(idx):
# skips all revisions, we interested in last one as oldest
pass
doc['created_at'] = olddoc['updated_at']
db.save(doc)