将MongoDB中的对象插入到可以引用两个不同对象的字段中

时间:2016-02-05 14:39:36

标签: node.js mongodb mongoose schema

在我的项目中,我有一个如下所示的消息模型:

var MessageSchema = new Schema({
fromId: {
    type: entityId,
    required: true
},
toId: {
    type: entityId,
    required: true
},
important: {
    type: Boolean, 
    required: false
},
lessonId: {
    type: Schema.Types.ObjectId, 
    ref: Models.Lesson,
    required: false
},
memberId: {
    type: Schema.Types.ObjectId, 
    ref: Models.Lesson,
    required: false
},
message: {
    type: String, 
    required: true
}});

只要用户和学校可以发送和接收消息,我就创建了一个复杂类型的'entityId',如下所示:

var entityId = {
id: {
    type: Schema.Types.ObjectId,
    required: true
},
entityName: {
    type: String,
    required: true,
    enum: entityTypeList.array
}};

我将它作为'type'放在我的MessageSchema中的fromId和toId字段中(如上所示)。现在,当我尝试插入像那样的实体时:

    sampleMessage1: {
    _id:"560e9504cac9a42f0e415bca",
    memberId: "5631f6883ad9bc561889f006",
    deleted:true,
    fromId:
        {
            entityName:"school",
            id:"55d1e957daea17d3e90a3c51"
        },
    toId:
        {
            entityName:"user",
            id:"569b89bb90d3ccd06d96644b"
        },
    important:false,
    message:"Sample message.",
    messageType:"notification",
    read:true,
    timestamp:"2015-07-31T16:11:32.714Z"
}

在'id'字段中使用'schema.create',在fromId和toId中的数据库中,而不是ObjectId,我得到String。我知道我可以这样做:

id: new ObjectId(55d1e957daea17d3e90a3c51")

但是我想知道是否有另一个解决方案,我不需要更改我的示例消息,我可以做一些我没有使用任何'ref:'显示的内容吗?

1 个答案:

答案 0 :(得分:0)

您是如何插入实体的?如果你正在做Message.insert(data)那么你就是在推翻猫鼬。尝试先创建消息

var message = new Message(data);
message.save();