Ich habe ein Dokument pro Tag pro Meter. Wie kann ich ein weiteres Filialdokument im Datenarray hinzufügen und das gesamte Dokument erstellen, wenn er nicht existiert?Mongodb upsert eingebettetes Dokument
{ "key": "20120418_123456789", "data":[ { "Meter": 123456789, "Dt": ISODate("2011-12-29T16:00:00.0Z"), "Energy": 25, "PMin": 11, "PMax": 16 } ], "config": {"someparam": 4.5} }
Kann ich upsert für diesen Zweck verwenden?
wird das Ergebnis sein, wenn Dokument vorhanden ist:
{ "key": "20120418_123456789", "data":[ { "Meter": 123456789, "Dt": ISODate("2011-12-29T16:00:00.0Z"), "Energy": 25, "PMin": 11, "PMax": 16 }, { "Meter": 123456789, "Dt": ISODate("2011-12-29T16:15:00.0Z"), "Energy": 22, "PMin": 13, "PMax": 17 } ], "config": {"someparam": 4.5} }
Vielen Dank im Voraus
ich werde 400000 addToSet pro Tag tun ... 96 Daten pro Dokument. Es scheint langsam zu sein ... Gibt es andere Möglichkeiten, das zu tun? – hotips
Wie bereits erwähnt, werden Sie mehrere Moves auslösen, indem Sie ein Array von Werten auf diese Art und Weise wachsen lassen - das wird eine Verlangsamung verursachen, wenn Sie das Array nicht irgendwie begrenzen und seine maximale Größe vorhersagen können - dann können Sie es entsprechend anpassen Updates wären viel schneller. Wenn Sie das nicht können, sollten Sie vielleicht ein anderes Schema in Erwägung ziehen und die Daten in einer anderen Sammlung als in einem eingebetteten Array haben. –