Meteor - 简单模式丢失对象属性

时间:2016-03-04 23:00:03

标签: meteor simple-schema

我有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: {} } 

我不明白为什么会这样。这是simple-schema中content属性的规范:

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

2 个答案:

答案 0 :(得分:1)

来自SimpleSchema docs

  

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

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

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

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

答案 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
}