我试图将用户之间的私人消息添加到我的数据模型中。我一直在两种可能的方式之间来回切换。猫鼬私人聊天消息模型
1)每个用户都有一个user_id,chat_id对的数组,对应于他们参与的聊天。聊天模型只存储chat_id和消息数组。
2)不要与用户存储聊天,只要聊天模型存储一对user_ids和消息数组。
选项(1)的问题是每当用户加入或开始聊天时,我需要首先查看数组,以便用户查看user_id,chat_id对是否已存在。然后在Chat中再次找到chat_id。如果它不存在,我需要在两个不同的地方为正在参与的用户创建user_id,chat_id对。
使用选项(2)我将通过聊天模型搜索user_id1,user_id2对,如果我发现它,我完成了,如果没有,我会为该对创建一个新的聊天记录并完成。
基于这个选项(2)似乎是处理这个问题的更好方法。然而,我遇到了一些问题,想要解决如何在聊天模型中轻松搜索用户id的“对”。即,如果user_id以错误顺序传递,即user_id2,user_id1,我如何确保我可以找到聊天记录。在Mongoose中建模的最佳方式是什么?
var chatSchema = mongoose.Schema({
messages: [{
text: {
type: String,
max: 2000
},
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}],
participant1: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}]
participant2: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}]
});
如果是这样的话,我将如何搜索参与者对?我能否以某种方式订购参与者ID,以便他们总是参与者1 <参与者2例如,使搜索更简单?
我想你会希望发件人如何拥有它,然后而不是'参与者1','参与者2'等,只是做'参与者:[{type:mongoose.Schema.Types.ObjectId,ref:' User'}]'这将给你一个用户数组,然后做一个搜索,你会做这样的事情'Chat.find({参与者:{$ in:{“数组名称”}},function(err,参与者){} – gmaniac 2014-11-14 19:21:22
@gmaniac谢谢!我想我最终会做出与你所建议的非常相似的东西。$ in不起作用,因为这样做$或$但是$ all都可以用于这个我认为。 – 2014-11-15 03:19:57
很高兴我可以帮助!如果你想更新你的问题,我们可以帮助你进一步或如果你找到你要找的答案并接受它 – gmaniac 2014-11-17 14:08:19