2016-10-24 1 views
0

Ich veröffentliche einige Daten in einer Meteor Blaze Vorlage, ich möchte bestimmte Felder zurückgeben, aber es ist ein kompliziertes Objekt mit geschachtelten Arrays/Objekte, also bin ich mir nicht sicher wie zu tun, ist diesenAusschließen von Objektschlüsseln in Arrays innerhalb von Objekten aus Meteor Veröffentlichung

hier, was ich veröffentliche ein Beispiel für das Objekt wie

{ "_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 <-------------- } ] } ] }

das ich die Veröffentlichung mit dem folgenden Code aussehen:

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

Wie kann ich diese Publikation ändern, um den Schlüssel "korrekt" auszuschließen, den ich mit Pfeilen markiert habe?

Fragen Array> Frage object> Antworten array> Antworten object> richtigen Schlüssel

+0

Ich würde Antworten von Fragen trennen, um Ihre Daten sauber zu halten. Sie können auch Sicherheit für die Antworten-Sammlung implementieren, aber Sie können nicht auf Felder innerhalb der Fragen Sammlung – Mikkel

+0

Wenn es zu einem Array kommt mongodb '$ Projektion' Operator hat seine Grenzen. ref. https://docs.mongodb.com/v3.2/reference/operator/projection/positional/#array-field-limitation, Ich würde vorschlagen, Ihr Datenmodell neu zu entwerfen, und wenn Redesign nicht möglich ist, konnten Sie das entfernen "richtige" Eigenschaft vor der Veröffentlichung. d. H. 'Questions.forEach (function (q) {q.answers.forEach (Funktion (a) {delete a. Correct})})', aber es kostet Leistung. – distalx

+0

Danke für die Antworten Jungs, ich entschied mich für die Antwort, die ich akzeptierte, weil es perfekt funktioniert. – Sean

Antwort

1

Wenn Sie alle veröffentlichen, wollen aber ein oder mehrere Felder auszuschließen (wie es scheint), sollte diese Arbeit:

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

Das funktioniert perfekt. Mein Fehler war nicht die "um" Fragen zu verwenden. hat einen Fehler geworfen. Habe es jetzt perfekt funktioniert. Vielen Dank – Sean

Verwandte Themen