从MongoDB中的对象数组中删除单个对象

时间:2012-11-16 20:22:50

标签: 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" } ] }
    .
    .
    .  

现在让我们说Frank(Palo Alto,id = 2)不再是我的朋友了,我想从收藏中删除他。我认为以下可能有效,但事实并非如此:

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

我希望能够做那样的事情。删除文档集合中数组中的对象。你是怎么做到的?

1 个答案:

答案 0 :(得分:9)

你很亲密。查询应该是这样的:

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

$pull获取一个对象,其字段指定字段数组"friends"。值{"name":"Frank"}表示查询(在数组内运行)以查找要拉出的元素。