現在、他のドキュメントから作成されたいくつかのドキュメントを持つCouchDBデータベースがあります。これは、文書内に「forked-from」フィールドが表示されます。リンクされたドキュメントからの値に基づいてCouchDBを減らす
例えば:
{
"_id":"doc_1",
"_rev":"1-a23f9403a1d86648b2a304f5a4c78c31",
"doctype":"entry",
"data":"foo",
"permissions":"private"
}
{
"_id":"doc_2",
"_rev":"1-9c15e43a8c8d4ce1b00af94b328d268d",
"doctype":"entry",
"data":"bar",
"forked_from":"doc_1"
"permissions":"public"
}
{
"_id":"doc_3",
"_rev":"1-b13c761e43121c074c44736826f3ce7e",
"doctype":"entry",
"data":"bat",
"forked_from":"doc_2"
"permissions":"private"
}
我々は現在、最も人気のある1が何であるかを教えてくれるされ、文書がフォークされた回数を返しますビューを減らす/マップを持っています。
function (doc) {
if (doc.doctype === 'entry' && doc.forked_from) {
emit(doc.forked_from, 1);
}
}
function(keys, values, rereduce) {
return sum(values);
}
とgroup=true
で、このビューを照会した結果は次のようになります。
{"rows":[
{"key":"doc_1","value":1},
{"key":"doc_2","value":1}
]}
しかし、私たちが希望しても、そのようにのみ、「パブリック」に設定されたアクセス権を持っている文書を返すことです照会した結果は次のようになります。
doc_1
はプライベートであるため返されません。
地図の段階で結果をフィルタリングすることはできません。確認するドキュメント全体ではなく、ドキュメントIDだけがあるためです。私はリンクされたドキュメント機能を使用してキーにドキュメントを追加しようとしましたが、マップのemit
に{'_id': doc.forked_from}
を含めましたが、CouchDBは 'include_docsは縮小ビューに対して無効です'と応答します。
このビューの結果をフィルタリングする方法についてのご意見はありますか?
あなたは、元の文書が公開されていることを意味していましたか?それともフォークですか? –
私は元の文書のパーミッションを意味します、私は明確にするための例を加えました。 – Jud