构建查询以在sails js中获取聊天对话消息

时间:2015-05-28 23:25:40

标签: node.js sails.js waterline

假设我有以下描述的模型架构,以便在我的sails应用程序中的2个用户之间添加一些聊天功能。例如,如果我让用户A向用户B发送消息,则用户B将回复给用户A,用户A将始终在两个用户之间创建2个对话。所以我的问题是如何查询两个对话以从A和B获取消息。我尝试过这样的事情,但也许这是一个简单的逻辑。

// User Model

attributes: {
  username: {
    type: 'string',
    required: true,
    unique: true,   
  },
  conversations_sender: {
    collection: conversation,
    via: 'sender'
  },
  conversations_recipient: {
    collection: conversation,
    via: 'recipient'
  }
}

// Conversation model

attributes: {
  sender: {
    model: user
  },
  recipient: {
    model: user
  },
  messages: {
    collection: 'message',
    via: 'conversation'
  }
}

// Message model

attributes: {
  text: {
    type: 'string'
  },
  conversation: {
    model: 'conversation'
  },    
}

// Conversation Controller

get: function(req, res) {
  var params = {
    or : [
      { 
        sender: req.param('sender'),
        recipient: req.param('recipient')
      },
      { 
        sender: req.param('recipient'),
        recipient: req.param('sender')
      }
    ]
  }

  Conversation.find(params) ...
}

1 个答案:

答案 0 :(得分:2)

您应该重新考虑一下您的架构,请参阅此链接,该链接具有满足您需求的良好数据库设计:

http://www.9lessons.info/2013/05/message-conversation-database-design.html

然后,你应该可以使用2个用户id获取所有消息,如下所示:

 Conversation.findAll({sender: ..., receiver: ...})

此外,您将需要一个时间戳来显示消息,将来您会想要以某种方式对它们进行排序,并且还可以制作好的“昨天阅读”功能