2016-03-04 42 views
2

我都附有一個​​,其中content酒店類型Object一個MongoCollection流星 - 簡單的模式失去對象屬性

下面的代碼寫入到控制檯的文件,然後將它插入,然後獲取與文檔正確的ID並將其寫入控制檯:

console.log(doc); 
const id = notes.collection.insert(doc); 
let newdoc = notes.collection.findOne({_id: id}); 
console.log(newdoc); 

在循環操作期間,content屬性的對象內的值將丟失。

插入之前:

I20160304-16:52:24.722(-5)? { doctorId: 'xD7FiSfYdqwk94gQ6',                                            
I20160304-16:52:24.723(-5)? patientId: '4wG3nnkzrfH4W2hsG',                                            
I20160304-16:52:24.723(-5)? created: 1457128344,                                               
I20160304-16:52:24.723(-5)? type: 'note',                                                
I20160304-16:52:24.727(-5)? content: { noteText: 'Test' } }                                            

當從數據庫中檢索:

I20160304-16:52:24.734(-5)? { _id: 'w6rRoMqtJc5EKFKFs',                                             
I20160304-16:52:24.735(-5)? doctorId: 'xD7FiSfYdqwk94gQ6',                                            
I20160304-16:52:24.735(-5)? patientId: '4wG3nnkzrfH4W2hsG',                                            
I20160304-16:52:24.735(-5)? created: 1457128344,                                               
I20160304-16:52:24.736(-5)? type: 'note',                                                
I20160304-16:52:24.736(-5)? content: {} } 

我不明白爲什麼會這樣。這是內容屬性的簡單模式的規範:

Carin.subschemas.object = { 
    type: Object, 
    optional: false 
}; 

回答

1

SimpleSchema docs

如果你有一個Object類型的關鍵,該對象的屬性將被驗證,以及,所以你必須在模式中定義所有允許的屬性。如果這是不可能的,或者您不在意驗證對象的屬性,請使用blackbox:true選項跳過對對象內所有內容的驗證。

在此基礎上,你要麼需要添加黑盒:真實的架構:

​​

,或者您需要添加所有相應的字段。

+0

謝謝,我錯過了那一點。我仍然發現插入對象的行爲奇怪,而不是拋出驗證錯誤。是否有一個原因? – Hans

+1

我還沒有看到源中的任何內容來表示不幸的推理。 –

1

錯誤原因:就不得不提到對象的屬性是否需要驗證或不

案例1: ,如果你希望自己的某些屬性來進行驗證

add 'optional :true' to fields that need not be validated 

//assume you want only x to be validated 
Carin.subschemas.object.x:{ 
    type:String, 
    label:"x" 
}, 
Carin.subschemas.object.y:{ 
    type:String, 
    label:"y", 
    optional:true 
} 

案例2:沒有任何屬性需要驗證

Carin.subschemas.object = { 
    type: Object, 
    blackbox: true, 
    optional: false 
}