我有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
};
答案 0 :(得分:1)
如果您有一个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
}