【问题标题】:How to exclude object keys within arrays within objects from Meteor publication如何从 Meteor 发布中排除对象内数组中的对象键
【发布时间】:2016-10-25 02:07:52
【问题描述】:

我正在向 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}});

如何修改该出版物以排除我用箭头突出显示的“正确”键?

问题数组>问题对象>答案数组>答案对象>正确键

【问题讨论】:

  • 我会将答案与问题分开,以保持您的数据干净。您还可以对答案集合实施安全性,但不能对问题集合中的字段实施安全
  • 当涉及到数组时,mongodb $projection 运算符有其局限性。参考。 docs.mongodb.com/v3.2/reference/operator/projection/positional/…,我建议重新设计您的数据模型,如果无法重新设计,您可以在发布前删除 correct 属性。即questions.forEach(function(q){ q.answers.forEach(function(a){delete a. correct}) }),但它会性价比。
  • 感谢大家的回复,我决定接受我接受的答案,因为它非常有效。

标签: arrays mongodb meteor meteor-publications


【解决方案1】:

如果您要发布所有内容,但想排除一个或多个字段(看起来像这样),这应该可以:

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

【讨论】:

  • 这非常有效。我的错误是没有在 'questions.answers' 周围使用 '',所以 .抛出一个错误。现在可以完美运行了。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2017-11-20
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 2015-10-24
  • 2015-12-24
相关资源
最近更新 更多