2

私はcouchdbデータベースに次のドキュメント構造を持っています:

{
  'type': 'Message',
  'subject': 'Cheap V1@gr@',
  'body': 'not spam',
  'metadata': {
    'participation': {
      'read': [1,2,3]
    }
  }
}

read配列は、メッセージを読んだユーザー ID のリストです。次のように、ユーザーが読んだメッセージでメッセージのリストをフィルタリングできるビューを簡単に作成できます。

マップ機能

function(doc) {
  doc['metadata']['participation']['read'].forEach(function(user_id) {
    emit(user_id, doc._id);
  });
}

次に、次のクエリを実行しますuser_id = 1

curl -X GET \
  http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1

私の質問は、ユーザーの ID が配列に含まれていないドキュメント、つまり「未読」メッセージを返すビュー/クエリを作成するにはどうすればよいかということです。read

4

2 に答える 2

1

タイ式マッサージと呼ばれるテクニックを使用する必要があります。

上記のリンクは、メールでの私の説明であり、Stack Overflow の同様の質問への回答で説明しました: Find CouchDB docs missing an any field

あなたがする必要があるバリエーションは、キーの2配列を発行することだと思います[user_id, doc_id]. user の「ヒット」を照会する場合、そのユーザーのヒットのみを表示するため1234に使用?startkey=[1234,null]&endkey=[1234,{}]します。

于 2012-05-04T09:45:49.390 に答える
0

次の Map 関数を使用できます。

 function(doc) {
   if(!doc.metadata.participation.read)
     emit(doc.user_id, doc);
  }

次に、user_id = 1 のクエリを実行します。

curl -X GET \
http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1
于 2012-05-04T04:02:16.940 に答える