2016-03-04 2 views
2

У меня есть MongoCollection с aldeed:simple-schema прикрепленными, где content свойства имеет тип Object:Метеор - Простая схема теряющих свойств объекта

Следующий код записывает документ на консоль, а затем вставляет его, а затем извлекает документ правильный идентификатор и записывает это на консоль:

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

ответ

1

Из SimpleSchema docs:

Если у вас есть ключ с типом объекта, свойства объекта будут проверены, а также , поэтому вы должны определить все допустимые свойства в схеме. Если это невозможно или вы не хотите проверять свойства объекта, используйте параметр «blackbox: true», чтобы пропустить проверку для всего, что находится внутри объекта.

Исходя из этого, вам необходимо либо добавить BLACKBOX: верно к вашей схеме:

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

Или вам нужно добавить все необходимые поля.

+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 
} 
Смежные вопросы