Ich habe folgende Zeitreihen Array (mit dem Namen „data“), in einem mongodb Dokument verschachtelt:Wie kann ich ein MongoDB-Zeitreihen-Array ohne Duplikate korrekt aktualisieren?
"_id" : ObjectId("5a235e645bb1000704593960"),
"data" : [
{
"Volume" : NumberLong(41527200),
"Adj Close" : 171.850006,
"High" : 172.139999,
"Low" : 168.440002,
"Date" : ISODate("2017-11-30T00:00:00.000+0000"),
"Close" : 171.850006,
"Open" : 170.429993
},
{
"Volume" : NumberLong(39726100),
"Adj Close" : 171.050003,
"High" : 171.669998,
"Low" : 168.5,
"Date" : ISODate("2017-12-01T00:00:00.000+0000"),
"Close" : 171.050003,
"Open" : 169.949997
},
{
"Volume" : NumberLong(39759300),
"Adj Close" : 171.050003,
"High" : 171.669998,
"Low" : 168.5,
"Date" : ISODate("2017-12-01T00:00:00.000+0000"),
"Close" : 171.050003,
"Open" : 169.949997
},
],
"ticker" : "AAPL",
"last_update" : ISODate("2017-12-07T00:00:00.000+0000")
}
Mein Problem ist, dass, wenn ich die Zeitreihen aktualisieren, einige Array-Elemente für ein bestimmtes Datum ändern können. Zum Beispiel gibt es im Array 2 Datensätze für 2017-12-01. Alle Felder sind identisch mit Ausnahme von "Volume". Wenn ich das Array jedoch aktualisiere, wird ein neuer Datensatz zu dem Array hinzugefügt, anstatt den vorhandenen 2017-01-01-Datensatz zu aktualisieren.
Ich bin derzeit die Aktualisierung das Dokuments mit dem folgenden:
self.__db.equity_data.update({'ticker': ticker,
'last_update': {'$lt': record['last_update']}},
{'$set': {'last_update':record['last_update']},
'$addToSet': {'data': {'$each': record['data']}}},
upsert=True
)
Gibt es eine Möglichkeit, die ich, dass ein doppeltes Element (basierend auf dem Datum) gewährleisten kann, ist nicht auf das Array hinzugefügt, und stattdessen aktualisiere die bestehendes Array-Element?
Danke für jede Hilfe.
Danke für die Antwort. Ich glaube Upsert gilt für die Dokumentebene. Dies ist auf Array-Ebene. Ich könnte mich jedoch irren. Ich habe versucht, upsert = False, aber das hat nicht das gewünschte Ergebnis. –