我試圖將用戶之間的私人消息添加到我的數據模型中。我一直在兩種可能的方式之間來回切換。貓鼬私人聊天消息模型
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