2016-02-05 65 views
0

在我的項目插入對象我有一個消息模型,看起來像這樣:MongoDB中到現場,可以參考兩個不同的對象

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 
}}; 

,我把這個作爲領域fromId和TOID我MessageSchema一個「類型」(如上圖所示)。現在,當我嘗試插入實體,如一個:

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" 
} 

使用「schema.create」,在「ID」字段,數據庫都在fromId和風溼,代替的ObjectId我得到的字符串。我知道我可以做這樣的事情:

id: new ObjectId(55d1e957daea17d3e90a3c51") 

,但我不知道是否有其他解決方案,我沒有改變我的樣本信息,我可以做一些事情我發現不使用任何「裁判:」?

回答

0

你如何插入實體?如果你正在做Message.insert(data)那麼你就是壓倒貓鼬。嘗試先創建消息

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

我正在使用schema.create。我試過message.insert()和message.save(),但它也不起作用。如果字段可以引用來自兩種不同模式的文檔,我可以跳過'ref'屬性嗎? –

+0

我不確定。我知道你可以打電話填充並明確設置模型。 .populate({path:'fromId.id',model:fromId.entityName}); 也許這可以幫助嗎? –