2012-11-16 6 views
5

Sagen wir die folgende Sammlung von Dokumenten haben:ein einzelnes Objekt aus einem Array von Objekten in MongoDB Löschen

{ "_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" } ] } 
    . 
    . 
    . 

Lassen Sie uns jetzt sagen, dass Frank (Palo Alto, id = 2) ist nicht mehr mein Freund, und Ich möchte ihn aus der Sammlung löschen. Ich dachte, das folgende könnte funktionieren, aber es funktioniert nicht:

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

Ich möchte in der Lage sein, so etwas zu tun. Löschen Sie ein Objekt innerhalb eines Arrays in einer Sammlung von Dokumenten. Wie machst Du das?

Antwort

9

Sie waren in der Nähe. Die Abfrage sollte wie folgt sein:

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

$pull nimmt ein Objekt, dessen Feld gibt die Feldanordnung "friends". Der Wert {"name":"Frank"} repräsentiert die Abfrage (um innerhalb des Arrays zu laufen), um das Element zu finden, das herausgezogen werden soll.

+1

Danke! Ich hätte stundenlang mit dem Kopf geschlagen, um das herauszufinden. –

Verwandte Themen