2

我有MongoCollection一个aldeed:simple-schema附件,其中content属性的类型为Object

以下代码将文档写入控制台,然后将其插入,然后获取具有正确 id 的文档并将其写入控制台:

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

在循环操作期间,内容属性的对象内的值会丢失。

插入前:

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

2 回答 2

1

来自SimpleSchema 文档

如果您有一个 Object 类型的键,则该对象的属性也将被验证,因此您必须在模式中定义所有允许的属性。如果这是不可能的,或者您不想验证对象的属性,请使用 blackbox: true 选项跳过对对象内所有内容的验证。

基于此,您需要将 blackbox: true 添加到您的架构中:

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

或者您需要添加所有适当的字段。

于 2016-03-04T23:24:30.133 回答
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
}
于 2016-03-05T04:47:31.600 回答