Ich habe ein Datenmodell, das so etwas wie folgt strukturiert ist:Kann ich in ein verschachteltes Array wechseln, ohne zu wissen, ob dieses Array bereits existiert?
{
"_id": "1234abcd",
"name": "The Stanley Parable"
"notes": [
{
"_id": "5678efgh",
"content": "Kind of a walking simulator."
},
{
"_id": "5678efgh",
"content": "Super trippy."
},
]
}
Ich verwende die Mongo-Treiber für C# mit diesem Modell in .NET-Core zu interagieren. Ich versuche, einem bestimmten Spiel eine neue Notiz hinzuzufügen - ohne unbedingt sicher zu sein, dass es bereits Notizen zu diesem Spiel gibt. Dies ist, was ich in der Lage gewesen, für das Hinzufügen einer verschachtelte Liste zu finden:
var filter = Builders<Mongo_VideoGame>.Filter.Eq("Id", id);
var update = Builders<Mongo_VideoGame>.Update.Push<Mongo_Note>(v => v.Notes, mongoNote);
var editedGame = _context.VideoGames.FindOneAndUpdate(filter, update);
Aber mein Problem ist, dass dies nur funktioniert, wenn es bereits ein „Notizen“ Element auf das Spielmodell. Ich könnte einfach ein leeres Array hinzufügen, wenn ich das ursprüngliche Spiel mache, aber das scheint weniger flexibel zu sein, das Schema zu ändern (d. H. Was, wenn ich Notizen zu bestehenden Daten hinzufüge).
An exception of type 'MongoDB.Driver.MongoCommandException' occurred in MongoDB.Driver.Core.dll but was not handled in user code: 'Command findAndModify failed: The field 'notes' must be an array but is of type null in document'
Wenn Sie den Speicher definieren, wird der Speicher nicht wie von Ihnen ermittelt zugewiesen. Bei Verwendung eines DI-Containers müsste die verdrahtete neue Liste verschoben werden. Vielleicht ist der Konstruktor als konstruktorbasierte Injektion ziemlich üblich. –