2014-02-27 51 views
16

子文檔我想刪除這樣的:通過查詢{d:2014001, m:123456789}刪除嵌套在一個數組中的MongoDB

{ 
"_id" : ObjectId("52d7c25480f0a83293adbbbc"), 
"d" : 2014001, 
"m" : 123456789, 
"topups" : { 
    "data" : [ 
      { 
        "val" : NumberLong(200), 
        "chId" : 2, 
        "reqSys" : "222220005031", 
        "old" : NumberLong(223), 
        "isRb" : false 
      }, 
      { 
        "val" : NumberLong(150), 
        "chId" : 2, 
        "reqSys" : "222220005031", 
        "old" : NumberLong(166), 
        "isRb" : false 
      } 
    ], 
    "total" : { 
      "cnt" : 2, 
      "revenue" : NumberLong(3500000) 
    } 
} 

我想找個對象,刪除整個對象:

{ 
"val" : NumberLong(200), 
"chId" : 2, 
"reqSys" : "222220005031", 
"old" : NumberLong(223), 
"isRb" : false 
}, 

從這個在具有「val」:200的數據數組中,如果在一個命令中可能的話。但是,如果沒有,多個命令也適用於我。嘗試過使用$ pull和$ pullAll,但我錯過了一些東西。

+0

可能重複的[如何刪除從一個雙嵌套數組的元素的MongoDB的文檔中] (http://stackoverflow.com/questions/5228210/how-to-remove-an-element-from-a-doubly-nested-array-in-a-mongodb-document) –

回答

21

要刪除的子文件使用$pull

該查詢將從嵌套的子文檔中刪除

db.collection.update({ d : 2014001 , m :123456789}, 
         {$pull : { "topups.data" : {"val":NumberLong(200)} } })