创建一个独立的用户模式,并将其嵌入到Mongoose / MongoDB的消息模式中?

时间:2014-06-27 02:21:38

标签: javascript node.js mongodb mongoose nosql

我有一个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
});

1 个答案:

答案 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”部分中每个用户的数组元素的成员,这正是您想要的。