在我的项目中,我有一个如下所示的消息模型:
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:'显示的内容吗?
答案 0 :(得分:0)
您是如何插入实体的?如果你正在做Message.insert(data)
那么你就是在推翻猫鼬。尝试先创建消息
var message = new Message(data);
message.save();