2012-11-16 11 views
5

że mamy następujący zbiór dokumentów:Usuwanie pojedynczego obiektu z tablicy obiektów w MongoDB

{ "_id" : ObjectId("50a69fa904c8310609600be3"), "id" : 100, "city" : "San Francisco", "friends" : [  { "id" : 1, "name" : "John" }, { "id" : 2, "name" : "Betty" },  { "id" : 3, "name" : "Harry" } ] } 
{ "_id" : ObjectId("50a69fc104c8310609600be4"), "id" : 200, "city" : "Palo Alto", "friends" : [  { "id" : 1, "name" : "Carol" },  { "id" : 2, "name" : "Frank" },  { "id" : 3, "name" : "Norman" } ] } 
{ "_id" : ObjectId("50a69fc304c8310609600be5"), "id" : 300, "city" : "Los Angeles", "friends" : [ { "id" : 1, "name" : "Fred" }, { "id" : 2, "name" : "Neal" }, { "id" : 3, "name" : "David" } ] } 
    . 
    . 
    . 

Teraz powiedzmy, że Frank (Palo Alto, id = 2) nie jest już moim przyjacielem, a Chcę go usunąć z kolekcji. Myślałem, że poniższe mogą działać, ale nie:

db.test.update({"city":"Palo Alto"},{"$pull":{"friends.name":"Frank"}}) 

Chciałbym móc coś takiego zrobić. Usuń obiekt w tablicy w zbiorze dokumentów. Jak Ty to robisz?

Odpowiedz

9

Byłeś blisko. Zapytanie powinno być tak:

db.test.update({"city":"Palo Alto"},{"$pull":{"friends":{"name":"Frank"}}}); 

$pull zajmuje obiekt, którego pole określa tablicę pola "friends". Wartość {"name":"Frank"} reprezentuje zapytanie (do uruchomienia wewnątrz tablicy), aby znaleźć element do wyciągnięcia.

+1

Dzięki! Przez wiele godzin biłem się w głowę, próbując to rozgryźć. –

Powiązane problemy