2015-08-04 16 views
5

ich versuche, von p2l Array für Objekt status Feld zu aktualisierenUpdate-Feld in Array mongodb C# Treiber

var update = Builders<BsonDocument>.Update.Set("p2l.$.status",BsonValue.Create(status)) 

Es scheint, dass Code gut funktioniert, aber wie es mit typisierten Builder zu implementieren und alle Felder mit Lambda-Set ? Ich fand eine Lösung durch den folgenden Link How to update a field in an array's subdocument contained in an array's subdocument in MongoDB using C# driver?

Aber es ist nur für alte Version des Treibers geeignet.

+0

Sie erkennen, "warum" das auf diese Weise notiert ist und daher keine Funktion auf Array-Mitglieder wie mit einem Lambda nicht wahr? Zwei verschiedene Dinge. Der Zweck besteht darin, das Array-Element im "Abfrage" -Ausdruck des Updates zu "finden". Dann wird der "übereinstimmende Index" auf diese Weise notiert, so dass das korrekte Element aktualisiert wird. –

Antwort

8

können Sie versuchen, so etwas wie:

Builders<Person>.Update.Set(x => x.Pets[-1].Name, "Fluffencutters") 

Hinweis -1 Index für Haustiersammlung, die für alle Elemente anwenden gesetzt bedeutet.
Ich fand diese Lösung durch Erkundung UpdateDefinitionBuilderTests.

Verwandte Themen