2012-01-15 5 views
23

Czy ktoś mógłby mi pokazać, czy istnieje lepszy sposób, aby usunąć jedną document z MongoDB pomocą Official C# Driver niż to, co mam below-Jak usunąć jeden "dokument" według "ID" przy użyciu oficjalnego sterownika C# dla MongoDB?

var query = Query.EQ("_id", a.Id); 
database.GetCollection<Animal>("Animal").Remove(query); 

Ten kod działa, ale wydaje zbyt dużo pracy do mnie. Na przykład polecenie "Zapisz" pobiera instancję i aktualizuje ją. Chcę coś takiego - Remove(item).

Uwagi: Próbuję użyć oficjalnego kierowcę C# zamiast NoRM lub Samus co wydaje się nieaktualne.

Odpowiedz

32

To jest sposób w jaki to robisz. Jestem pewien, że wiesz o tym, ale jeśli chcesz umieścić go na jednej linii można połączyć je, dzięki czemu nie trzeba zdefiniować zmienną zapytanie:

collection.Remove(Query.EQ("_id", a.Id)); 
+0

Próbuję usunąć przez pole innym niż _id i starałem Query.EQ („nazwa pola”, wartość), ale nie zrobił nie działa. Jak mam to zrobić? W rzeczywistości twój kod podaje ten sam błąd: "tylko klasy mogą być mapowane obecnie." –

+0

Czy korzystasz z prawa przy użyciu importu? –

+0

Właśnie zdałem sobie sprawę, że użyłem kwerendy linq, a nie Query.EQ() powyżej, i myślę, że to był problem, ponieważ zadziałało, kiedy zmieniłem go na kwerendę Query.EQ(). Dzięki za pomoc. –

17

Jeśli [id] to ciąg znaków, ty musi jawnie używać instancji ObjectId.

var query = Query.EQ("_id", ObjectId.Parse(id)); 
+0

Wystąpił problem, który rozwiązuje ta odpowiedź. Dzięki. Rewizja. –

10

najprostszych sposób usunąć document z collection dla C# MongoDB.Driver wersji 2.0 lub później-

collection.DeleteOne(a => a.Id==id); 
0
działanie

My ASP.NET MVC kontrolera Rdzeń akceptuje Id jako parametr ciągu. Potem analizować je i wykorzystać wynik w deleteOne() oświadczenie:

[HttpPost] 
public IActionResult Delete(string id) 
{ 
    ObjectId objectId = ObjectId.Parse(id); 
    DbContext.Users.DeleteOne(x => x.Id == objectId); 
    return null; 
}