2013-04-05 71 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

相关问题