0

現在、Couchdb を使用して 2 人のユーザー間のチャット履歴を保存しています。私のデータベースには、すべてのユーザーが入力したすべての挿入メッセージが含まれています。次のように入力します。

{
  _id: (timestamp),
  from: sender,
  to: receiver,
  message: msg
}

次のようにコード化されたビューがあります。

   function(doc) {
     if (doc.from && doc.to){
         (doc._id, doc);
     }
   }

現在のセットアップに基づいて 2 人のユーザー間のチャット コンバージョンを取得するアイデアを考えるのに苦労しています。

ビュー関数内で次のようにしました。

res.forEach(function (row) {
    if(row.from != null || row.to != null){
          if((row.from == socket.username && row.to == receiver) || (row.from == receiver && row.to == socket.username)){
             MsgHistoryContent += row.message + '\n';
          }
    }
});

ただし、すべてのユーザーからすべてのメッセージを取得するため、2 人のユーザー間のすべての会話を取得するわけではありません。

誰でも私にリードを与えることができますか?どんな助けでも大歓迎です。

PS: node.js と cradle を使用しています。

4

1 に答える 1

0

次のようなマップ関数を作成できます。

function(doc) {
    var key = [doc.from, doc.to].sort(function (a, b) {
        return a.localeCompare(b);
    });

    emit(key.concat(doc._id), doc);
}

次に、「?startkey=["user1", "user2"]&endkey=["user1", "user2", {}]」をクエリすることで、ユーザー間の会話を取得できます。もちろん、開始キーと終了キーの両方の 0 と 1 のインデックスは、アルファベット順に並べ替える必要があります。

于 2012-12-10T21:51:24.790 に答える