1

私のcouchDbドキュメントの構造はこのようなものです

投稿

 {
      _id : '123132adsf',
    'userId' :'7236jsdfkaf',
     'Title' : 'This is a sample post'
}

ユーザー

{
   '_id' : '7236jsdfkaf',
   'count' : 1
}

私が探している機能は、投稿ビューを使用して投稿ドキュメントがクエリされるたびに、投稿を所有するユーザーのカウント フィールドが更新されることです。 1 つは照会用、もう 1 つは更新用のデータベースへの要求です。

4

2 に答える 2

2

投稿のIDをアプリオリに知っていればそれができます。更新機能を使用して、投稿ドキュメントのviewedフィールドの値をに変更1し、投稿のデータを返すことができます。しかし、それは汚いハックです。代わりにcount、使用するユーザードキュメントで、ユーザーのの合計を減らしviewedます。事は、更新関数は任意のクエリを実行できないため、事前に投稿のIDを知っている必要があります-それは与えられたドキュメントを変更します。

于 2013-03-09T19:35:52.937 に答える
2

厳密に言えば、ビューから読み取る場合は、別の場所に機能を追加する必要があります。

CouchDB では、ユーザー ドキュメント (およびリビジョン) を読み取り、読み取り専用の View 操作中にそれを元に戻すことができる必要があります。

ドキュメントgetリクエストは、読み取り中に他のドキュメントに影響を与えることはできません (または読み取ることさえできません) (ビューも読み取り専用です)。読み取りは、特定のドキュメント バージョンに対してキャッシュ可能であることを意図しています。show( docs ) とlistCouchDB の機能でさえ、これが起こらないようにします。

その他の注意事項:

また、CouchDB がフィールドの自動インクリメントを実行するための最適なオプションであるとは限らないという問題についても考慮してください。これは、直面する可能性のあるいくつかの課題について詳しく説明している、優れた StackOverflow の回答です。基本的に、ドキュメントのリビジョンが CouchDB で管理される方法が原因で、(必要に応じて) カウンターを頻繁にインクリメントすると、頻繁にデータベースを圧縮しないと、ディスクが過度に使用される可能性があります。ページビューのカウントを行うには、他のシステムの方が適している場合があります。

Update関数 ( docs )を使用するという提案を使用した場合、キャッシュ ページ/投稿のコストが高くなり、投稿が要求されるたびに CouchDB インスタンスが常に改訂されたドキュメント/投稿を返す必要がありますが、これは非常に不要です (そして、可能な場合は Web 層にキャッシュされます)。

于 2013-03-09T17:32:07.843 に答える