2012-11-16 114 views
5
刪除單個對象從對象的數組

假設我們有文件下列集合: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" } ] } 
    . 
    . 
    . 

現在,讓我們說,弗蘭克(帕洛阿爾託,ID = 2)不再是我的朋友,我想從集合中刪除他。我認爲以下方法可行,但它不會:

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

我希望能夠做到這樣的事情。在文檔集合中刪除數組內的對象。你怎麼做到這一點?

回答

9

你很近。查詢應該是這樣的:

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

$pull接受一個對象,其字段指定字段陣列"friends"。值{"name":"Frank"}代表查詢(在數組內運行)查找要拉出的元素。

+1

謝謝!試圖弄清楚這一點,我會讓自己頭腦發呆。 –