2016-12-30 23 views
0

我有一個用戶的集合,其中有位置,有一些API鍵。從二級嵌入式文檔刪除項目

{ 
    "_id" : ObjectId("5864d5e2962d747913577cc1"), 
    "username" : "george", 
    "usernameCanonical" : "george", 
    "email" : "[email protected]", 
    "emailCanonical" : "[email protected]", 
    "enabled" : true, 
    "password" : "bla bala bla", 
    "roles" : [], 
    "lastLogin" : ISODate("2016-12-29T09:23:18.000Z"), 
    "locations" : [ 
     { 
      "_id" : ObjectId("5864da9c962d7476037076b2"), 
      "name" : "lalala", 
      "address" : "bla bla bla", 
      "api_keys" : [ 
       { 
        "_id" : ObjectId("58651d06962d74760b196a52"), 
        "key" : "some valid key1", 
        "is_test" : true 
       } 
      ] 
     } 
    ] 
} 

我試圖刪除api_key沒有成功。

我嘗試:

1)

db.getCollection('user').update(
    { 'locations.api_keys._id': ObjectId('5864d5e2962d747913577cc1') }, 
    { 
     $pull: { 
      '$.api_keys': { 
       _id: ObjectId("58651d06962d74760b196a52") 
      } 
     } 
    }, false, true 
) 

=>更新的0在7毫秒

2結果)

db.getCollection('user').update(
    {}, 
    { 
     $pull: { 
      '$.api_keys': { 
       _id: ObjectId("58651d06962d74760b196a52") 
      } 
     } 
    }, false, true 
) 

=>更新的1現有記錄( s),但沒有更改存儲的對象

回答

2

試試這個

db.getCollection('user').update(
{}, 
{ 
    $pull: { 
     'locations.0.api_keys': { 
      _id: ObjectId("58651d06962d74760b196a52") 
     } 
    } 
}, false, true); 
0

更多預感

db.getCollection('user').update(
    {}, 
    { 
     $pull: { 
      'locations.$.api_keys': { 
       _id: ObjectId("58651d06962d74760b196a52") 
      } 
     } 
    }, false, true 
) 
+0

對不起,它拋出一個錯誤。位置運算符沒有從查詢中找到所需的匹配。 Unexpanded update:locations。$。api_keys' –

0

的根據上述描述,請嘗試在MongoDB中收集執行以下更新操作

db.user.update(
    {}, 
    $pull:{locations:{api_keys: 
     {$elemMatch:{_id:ObjectId("58651d06962d74760b196a52")}} }}},false,true 
    ) 
+0

它刪除位置對象,而不是api_key對象 –