0

我目前正在使用 Couchdb 来保存两个用户之间的聊天记录。我的数据库包含每个用户输入的每条插入消息。它们是这样输入的:

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

我有一个这样编码的视图:

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

我很难想出一个想法来根据我当前的设置检索两个用户之间的聊天转换。

我在视图函数中按照以下方式进行了操作:

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';
          }
    }
});

然而,这并没有检索到两个用户之间的所有对话,因为它检索了每个用户的所有消息。

任何人都可以给我一个领导?任何帮助,将不胜感激。

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 回答