Wie kann ich löschen verschachtelte array-element in eine mongodb-Dokument mit der c# - Treiber
Ich bin neu in der Mongodb world und jetzt bin ich kämpfen, wie kann ich die delete -, update-element in eine verschachtelte array-Feld eines Dokuments. Hier ist mein samle Dokument:
{
"_id" : ObjectId("55f354533dd61e5004ca5208"),
"Name" : "Hand made products for real!",
"Description" : "Products all made by hand",
"Products" : [
{
"Identifier" : "170220151653",
"Price" : 20.5,
"Name" : "Leather bracelet",
"Description" : "The bracelet was made by hand",
"ImageUrl" : "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQii6JCvXtx0iJGWgpvSl-KrdZONKYzDwS0U8uDvUunjO6BO9Aj"
}
]
}
In meiner Methode bekomme ich die id des Dokuments und die id(Kennung) des Produkts, die ich löschen möchte. Kann mir jemand sagen wie kann ich das löschen aus dem Produkte-Feld, das element mit Id: 170220151653 ?
Habe ich versucht:
var query = Query.And(Query.EQ("_id", categoryId), Query.EQ("Products.Identifier", productId));
var update = Update.Pull("Products", new BsonDocument(){{ "Identifier", productId }});
myDb.Applications().Update(query, update);
als hier vorgeschlagen: MongoDB entfernen Sie ein Filialdokument Dokument von einem Filialdokument
Aber ich bekomme eine Fehlermeldung bei
myDb.Anwendungen()
Es einfach nicht gefunden werden.
GELÖST:
var pull = Update<Category>.Pull(x => x.Products, builder => builder.EQ(q => q.Identifier, productId));
collection.Update(Query.And(Query.EQ("_id", ObjectId.Parse(categoryId)), Query.EQ("Products.Identifier", productId)), pull);
- Sie löschen möchten nur
Identifier
oder ein ganzes array ? - das ganze element hat die Id
- stackoverflow.com/questions/34115181/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie aufrufende Methode
Pull(string name, MongoDB.Bson.BsonValue value)
und nach die docs esund Sie bieten
{ "Identifier", productId }
als Wert. Ich denke, dass mongo nicht finden, dass genaue Wert.Versuchen, die zweite überladung von
Pull
mit dem Abfrage-Zustand statt, der genaue WertUPDATE
Da Sie erwähnen
Category
Entität also ich kann empfehlen die Verwendung von lambda stattQuery.EQ
:Update<Category>
hmmm, Sie hat nicht erwähnt, dass SieCategory
Typ... wie auch immer, das ist die stark-typisierte bei meiner Lösung ist, bitte nicht vergessen zu markieren die Antwort.War ich auch vor dem gleichen problem, und dann endlich nach viel R&D, ich kam, zu wissen, dass Sie verwenden müssen PullFilter statt Ziehen, wenn Sie löschen möchten mit filter.
Hi wie pro mein Verständnis, das Sie entfernen möchten, ganz abgestimmt Elemente der angegebenen id und Bezeichner, so unten-Abfrage kann Ihr problem lösen, aber ich weiß nicht, wie zu konvertieren, das in
C#
hier mongo $ziehen Methode verwenden.