我有一个User模式和一个Message模式,这些模式当前是独立的,但应该是相关的。
var schemaUser = new Schema({
username: String,
encryptPass: String,
created: Date
});
var schemaMessage = new Schema({
from: String,
to: [String],
message: String,
created: Date
});
可以独立于Message架构创建User架构,但是可以将其嵌入到Message架构的“to:”字段中的数组中吗?
var schemaMessage = new Schema({
from: String,
to: [schemaUser],
message: String,
created: Date
});
从那里,'to:'字段中的每个嵌入式用户文档是否都有不同的嵌入式文档“views:”以及与每条消息的每个用户相关的其他字段?
这是否代表多个嵌入式用户的不同“查看”和“阅读”条件:
var schemaMessage = new Schema({
from: String,
to: [
{
schemaUser
},
{
view: {
inbox: Boolean,
outbox: Boolean,
archive: Boolean
}
},
{
read: {
marked: Boolean,
datetime: Date
},
}
],
message: String,
created: Date
});
答案 0 :(得分:1)
您似乎想要一些基本上抽象“用户”的内容,其中包含一些特定于此用户在邮件上的状态的自定义属性:
var schemaUser = new Schema({
username: String,
encryptPass: String,
created: Date
});
var schemaUserMessage = new Schema({
user: { "type": Schema.ObjectId, "ref": "User" }
username: String,
view: {
inbox: Boolean,
outbox: Boolean,
archive: Boolean
},
read: {
marked: { "type": Boolean, default: false },
date: Date
}
});
var schemaMessage = new Schema({
from: String,
to: [schemaUserMessage],
message: String,
created: Date
});
var User = mongoose.model( "User", userSchema );
var Message = mongoose.model( "Message", messageSchema );
因此,仍然嵌入的中间模式定义具有与其特定的数据“视图”相关的属性的信息,以及在适当的用户上保留一些信息。
“用户名”有意义保持嵌入在此上下文中,因为您将经常使用它,否则不想从外部模型填充。但是“整个”用户对象实际上可能有更多的字段而不是显示,每次嵌入都没有多大意义。
您仍然保留引用,因此如果您需要提取更多详细信息,可以从_id
轻松引用该信息,该信息将针对外部架构与“user”保持一致。
此外,所有这些属性都被正确定义为“to”部分中每个用户的数组元素的成员,这正是您想要的。