Как исключить ключи объектов в массивах внутри объектов из публикации Meteor

Я публикую некоторые данные в шаблоне 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}});

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

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


person Sean    schedule 24.10.2016    source источник
comment
Я бы отделил ответы от вопросов, чтобы сохранить ваши данные в чистоте. Вы также можете реализовать безопасность для коллекции ответов, но не для полей в коллекции вопросов.   -  person Mikkel    schedule 24.10.2016
comment
Когда дело доходит до массива, оператор mongodb $projection имеет свои ограничения. исх. docs.mongodb.com/v3.2 /reference/operator/projection/positional/, я бы предложил перепроектировать вашу модель данных, и если редизайн невозможен, вы можете удалить свойство correct перед публикацией. то есть questions.forEach(function(q){ q.answers.forEach(function(a){delete a. correct}) }) , но это будет стоить производительности.   -  person distalx    schedule 24.10.2016
comment
Спасибо за ответы, ребята, я решил пойти с ответом, который я принял, потому что он отлично работает.   -  person Sean    schedule 24.10.2016


Ответы (1)


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

return Assessments.find( {"name": "Exam Name"}, {fields: {
    'questions.answers.correct': 0
}});
person Luna    schedule 24.10.2016
comment
Это работает отлично. Моя ошибка заключалась в том, что я не использовал '' вокруг 'questions.answers', поэтому . выдавал ошибку. Теперь он работает отлично. Спасибо - person Sean; 24.10.2016