我正在尝试使用MongoDB和以下架构存储两个用户之间的对话。
`var messageSchema = new Schema({
users: [
{
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
{
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}],
user_msgs: [
{
is_sender: {}, //A user in users
msg_body: String,
created: {
type: Date,
default: Date.now
}
}
]
});`
有没有办法定义is_sender,以便它只能是来自用户的用户?
答案 0 :(得分:0)
或许is_sender
不应该是数据类型,而是一个函数(接受用户然后运行查询以确定该用户是否在消息users []中)。
也许您打算is_sender
返回一组用户。在这种情况下,一种方法是将is_sender
作为一个函数来运行查询以返回结果(一组用户)。
答案 1 :(得分:0)
我认为这种架构设计存在一些问题。首先,messageSchema
看起来更像conversationSchema
,其中包含两个用户之间的大量消息。您可能希望将每条消息都作为文档。此外,数组类型不允许您选择长度 - 您似乎希望在users
中限制为两个长度。在这种情况下,只有两个用户字段。用户可以是嵌入式文档,其中包含对用户和可选is_sender
字段的引用,或者您可以使用用户字段本身的名称来指示谁是发件人。我认为更好的架构看起来像
var messageSchema = new Schema({
sender: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
recipient : {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
msg_body: String,
created: {
type: Date,
default: Date.now
}
})
虽然这是推测性的,因为我不知道你的完整用例。