Couchdb检索两个用户之间的聊天记录

时间:2012-12-10 18:06:32

标签: node.js nosql couchdb cradle

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

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

我的视图编码如下:

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

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

我在view函数中按以下方式执行:

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

但是它没有检索到两个用户之间的所有对话,因为它检索来自每个用户的所有消息。

任何人都可以给我带头?任何帮助将不胜感激。

P.S:我正在使用node.js和cradle。

1 个答案:

答案 0 :(得分: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索引都应该按字母顺序排序。