2013-04-05 80 views
3

這裏子句是我收集的(工人)的子文檔:的MongoDB:刪除與其中包含的文件和子文件

"type" : "Manager", 
"employees" : [{ 
    "name" : "bob" 
    "id" : 101 
    },{ 
    "name" : "phil" 
    "id" : 102 
    },{ 
    "name" : "bob" 
    "id" : 103 
    }] 

第一:這是不是數組所以$ pullAll將無法正常工作或其它陣列命令。我想要做的就是:(1)在所有子文檔中使用類型管理器搜索id 101的集合。 (2)如果101存在「經理」子文件,我想刪除項目103.

我一直在這個問題上傾吐了兩天的互聯網,並無法弄清楚。

我已經試過這(和許多其他變化):

db.workers.update({"type":"Manager","employees.id":101},{$pull : {"employees.id" : {"id" : 103}}},false,true) 

回答

4

$pull對象的語法是關閉的。試試這個:

db.workers.update({"type":"Manager","employees.id":101}, 
    {$pull : {"employees" : {"id" : 103}}},false,true) 

爲了證實他們被拆除:

db.workers.find({ 
    type: "Manager", 
    $and: [{'employees.id': 101}, {'employees.id': 103}] 
}) 
+0

我做到這一點,那麼我下面來驗證這個組合沒有 不復存在: db.workers.find({」鍵入「:」經理「,」items.id「:101,」items.id「:103})。count() 和我仍然獲得8條記錄 - 我的發現是不正確的? – lostinthebits 2013-04-05 16:43:38

+0

@ user2249490該查詢無效。你不能在同一個查詢對象中使用'「items.id」'兩次相同的鍵。 – JohnnyHK 2013-04-05 17:38:36

+0

謝謝。我將如何編寫一個查詢來驗證103和101不再存在於同一個員工密鑰中? – lostinthebits 2013-04-05 17:50:42

相關問題