! Gelöst!
Das Problem hier ist, dass ich nicht wusste, was das Paket aldeed:collection2 mit meinem Code machte. Ich habe dieses Paket hinzugefügt, um OrionJS zu verwenden (hier ist die github page). Und ich habe nicht bemerkt, dass diese aldeed:collection2 Validierung für alle meine Updates erzwang. Ich bin schon einmal darauf gestoßen, aber es gab mir einen Fehler. In der Vergangenheit konnte ich den Fehler zurückverfolgen. Dieses Mal gab es keinen Fehler überall. Es würde das Array aktualisieren, aber mit einem leeren Objekt. So verwirrend. Ich werde ein Problem auf der Projektseite aldeed:collection2 veröffentlichen.
Vom project documentation: "[aldeed:collection2 ist a] Meteor-Paket, das Sie ein Schema zu einem Mongo.Collection befestigen kann validiert automatisch gegen dieses Schema beim Einsetzen und von Client- oder Server-Code zu aktualisieren.."
Die documentation für die Korrektur kann here gefunden werden.
Lösung:
Weil ich aldeed:simple-schema und aldeed:collection2 mit Ich muß sicherstellen, dass ein richtiges „Schema“, um meine Sammlung zu befestigen.
wie folgt:
Ideas.attachSchema(new SimpleSchema({
// ... a bunch of other schema data
// I was missing this:
score: {
type: [Object],
optional: true,
label: 'Score',
},
"score.$.userId": {
type: String,
optional: true,
label: 'Score'
},
"score.$.score": {
type: String,
optional: true,
label: 'Score'
}
// ... a bunch more schema data
});
Fehlerbehebung:
Wie habe ich das herausgefunden?
Nun, ich bin neu in MongoDB - also wollte ich nicht zur Konsole gehen und nur versuchen, das Update von dort zu machen. Tatsächlich fiel mir das erst ein, als ich mit meiner Frau sprach.
Ich habe alles versucht, Anführungszeichen um alles Hinzufügen anderer Leute Code suchen. Ich habe alle hervorragenden MongoDB-Dokumente ausgecheckt. Ich habe Youtube-Videos angeschaut. Ich schaute auf andere stackoverflow.com Lösungen. Endlich fiel mir auf, dass der Code aller anderen genauso aussieht wie mein Code, und das sollte einfach funktionieren. Ich habe mich sogar unter Clarity.fm angemeldet, um eine Frage von Sacha Greif für $ 1 pro Minute zu stellen.
... Ich begann zu denken, dass meine Mongo-Datenbank nicht funktionierte. Vielleicht mein Mongo Installation wurde gebrochen?
Also, okay, es ist ein Test für die ... Nach zwei Tagen dieser Folter für mich ist es schließlich kam - gerade das Update in der Mongo-Konsole versuchen ... (duh)
meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
"_id" : "DqEGjK3xSTBdpEgXa",
"title" : "Revive Randolf With Bloodmagic",
"body" : "Bring Randolf back from the dead using witche's bloodmagic.",
"userId" : "Rz28ByKYM4Y8futFb",
"author" : "Iryna Iglehart",
"episodeId" : "iQaxyLPi5iaYtQngf",
"timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
"score" : [
{
"userId" : "123456",
"score" : 1
}
],
"overallScore" : 0,
"votedOnBy" : [ ],
"timesVotedOn" : 0
}
Sobald ich wusste, dass Mongo könnte mein Update tun - ich wusste das Problem musste mit meinem Meteor Setup sein. Ich hätte jetzt ein Problem auf dem Meteor gefunden, wenn das ein Problem wäre. Ich habe jede dunkle Ecke von Google durchsucht und versucht, diese herauszufinden.
Es dauerte nicht lange, bis ich mich daran erinnerte, dass ich seltsame Validierungsprobleme hatte. Außer diesen Validierungsproblemen kam immer ein Fehler. Die Tatsache, dass es keinen Fehler gab und das Array einfach mit leeren Objekten aktualisiert wurde, warf mich wirklich auf eine Schleife.
Was ich gelernt habe:
- Wenn zuerst Meteor ausfällt, die Mongo Konsole versuchen ...
- Per @David Weldon ‚s Kommentar - eine weitere gute Debugging-Technik, die mir geholfen haben würde, was ich vor langer Zeit hätte ausprobieren können, ist ein neues Meteorprojekt zu starten und meinen Code dort draußen zu testen, dann Pakete einzeln hinzuzufügen und zu sehen, wann/wenn einer von ihnen den Code bricht. Dieser Test hätte darauf hingewiesen, dass der Code grundsätzlich korrekt war und nur das angehängte Schema wegen eines hinzugefügten Pakets benötigt.
- Fügen Sie nicht blind Pakete hinzu. Verstehen Sie, wenn/wenn Pakete den Fluss der Entwicklung wie verändern aldeed:collection2
Danke:
Vielen Dank an @Michel Floyd und @David Weldon für Ihre Hilfe zu diesem Problem.
Wichtige Links:
- Ich lernte einiges von common mistakes geschrieben von @David Weldon
- Die documentation for aldeed:collection2
- Die documentation for aldeed:simple-schema
- Suche nach "Suchen von Daten" auf this meteor tutorial - es spricht über fetch() und wie es hilfreich ist. Dies half mir bei der Fehlersuche zu diesem Problem.
- Überprüfung der documentation on about update von MongoDB
- MongoDB $addToSet Documentation
- MongoDB $push Documentation
- [MongoDB Bios Beispiel Sammlung] (https://docs.mongodb.com/manual/reference/bios-example-collection/] - Es wurde nach wie dies in dem Dokument, die mich wirklich dort heraus nichts falsch mit meinem Datenbank-Design, es sollte eine Möglichkeit, dies zu tun, die ganze Zeit (und es ist offensichtlich)
Verwandte Frage gewesen:
[Solved] How to Update An Array of Subdocuments on a MongoDB Collection in MeteorJS
'.find()' und '.findOne()' Format etwas anders in der Meteor Mongo Konsole, versuchen diese. Oder versuchen Sie 'db.ideas.findOne (id) .score' –
@ Jeremy Ich vermute, dass Sie nur Dokumente sehen, die durch vorherige Versuche eingefügt wurden und/oder Sie von mehr als einer Stelle einfügen. Wenn dies eine Entwicklungsumgebung ist, versuchen Sie es einfach mit 'db.ideas.remove ({})' und starten Sie dann die App erneut (oder führen Sie 'meteor reset' aus). Siehe auch [Häufige Fehler] (https://dweldon.silvrback.com/common-mistakes) für findOne vs fetch in meteor. –
[@Michel Floyd] (http://stackoverflow.com/users/2805154/michel-floyd): Danke für den Vorschlag. Ich habe es versucht, ohne Glück. Hier ist die [Ausgabe meiner Konsole:] (https://git.io/vom7c) https://git.io/vom7c –