2016-10-24 3 views
0

Я публикую некоторые данные в шаблон Meteor blaze, я хочу возвращать определенные поля, но это сложный объект с вложенными массивами/объектами, поэтому я не уверен, как чтобы сделать этоКак исключить объектные ключи внутри массивов внутри объектов из публикации Метеор

Вот что пример объекта я издательским будет выглядеть

{ "_id": "q9i6qAZmKcf6MCPE2", "name": "Exam Name", "questions": [ { "number": 1, "question": "Question 1", "multipleTrue": false, "answers": [ { "letter": "a", "answer": "Blah Blah", "correct": false <-------------- }, { "letter": "b", "answer": "Blah Blah", "correct": true <-------------- } ] }, { "number": 2, "question": "Question 2", "multipleTrue": false, "answers": [ { "letter": "a", "answer": "Blah Blah", "correct": true <-------------- }, { "letter": "b", "answer": "Blah Blah", "correct": true <-------------- } ] } ] }

Я издательским это с помощью следующего кода:

return Assessments.find({"name": "Exam Name"}, {fields: {name: 1, questions: 1}});

Как я могу изменить эту публикацию, чтобы исключить ключ «правильный», который я выделил стрелками?

Вопросы массива> объектные вопрос> ответ массив> ответы объект> правильный ключ

+0

Я бы выделил ответы на вопросы, чтобы ваши данные были чистыми. Вы также можете реализовать безопасность в коллекции ответов, но не можете по полям в наборе вопросов. – Mikkel

+0

Когда дело доходит до массива, оператор mordodb '$ projection' имеет свои ограничения. ссылка https://docs.mongodb.com/v3.2/reference/operator/projection/positional/#array-field-limitation, Я бы предложил перепроектировать вашу модель данных, и если редизайн невозможен, вы можете удалить свойство 'correct' перед публикацией. i.e. 'questions.forEach (function (q) {q.answers.forEach (функция (a) {delete a. Correct})})', но это будет стоить производительности. – distalx

+0

Спасибо за ответы, ребята, я решил пойти с ответом, который я принял, потому что он отлично работает. – Sean

ответ

1

Если вы публикуете все, но нужно исключить одно или несколько полей (кажется, что это), это должно работать:

return Assessments.find({"name": "Exam Name"}, {fields: { 
    'questions.answers.correct': 0 
}}); 
+0

Это прекрасно работает. Моя ошибка заключалась не в том, чтобы использовать «круглые» вопросы. была ошибка. Теперь он отлично работает. благодаря – Sean