【发布时间】:2014-11-14 18:35:43
【问题描述】:
我正在尝试将用户之间的私人消息添加到我的数据模型中。我一直在两种可能的方式之间来回走动。
1) 每个用户都有一组 user_id、chat_id 对,它们对应于他们正在参与的聊天。聊天模型只存储 chat_id 和消息数组。
2) 根本不存储与用户的聊天,只需让聊天模型存储一对 user_ids 和消息数组。
选项 (1) 的问题是,每当用户加入或开始聊天时,我需要先查看用户数组以查看 user_id、chat_id 对是否已经存在。然后在 Chat 中再次查找 chat_id。如果它不存在,我需要在两个不同的地方为参与的两个用户创建 user_id、chat_id 对。
使用选项 (2),我将在 Chat 模型中搜索 user_id1、user_id2 对,如果找到,我就完成了,如果没有,我将为该对创建一个新的 Chat 记录并完成。
基于此选项 (2) 似乎是更好的处理方式。但是,我在弄清楚如何以在聊天模型中易于搜索的方式对“对”用户 ID 进行建模时遇到了问题。即,即使 user_ids 以错误的顺序传递,即 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
【问题讨论】:
-
我想你会想要发件人你有它,然后而不是做
participant1,participant2,等等。只做participants: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],这会给你一个用户数组,然后要进行搜索,你会做这样的事情Chat.find({ participants: { $in: { "array of names" }}, function (err, participants) { } -
@gmaniac 谢谢!我想我最终会做一些与你建议的非常相似的事情。 $in 不起作用,因为 $or 但我认为 $all 确实适用于此。
-
很高兴能帮上忙!如果您想更新您的问题,我们可以进一步为您提供帮助,或者如果您找到了您正在寻找的内容,请发布答案并接受它。