我有这样的节点:
[_id] => MongoId Object (
[$id] => 4e90cb3cd68417740c000017
)
[label] => mystery
[owner] => me
[parents] => Array (
[0] => Array (
[id] => MongoId Object (
[$id] => 4e8c6bb6d68417340e0004ca
)
[owner] => userid
[timestamp] => 1318112522
)
)
[timestamp] => 1318112060
[translabel] => mystery
[type] => 0
我要做的是删除ID为4e8c6bb6d68417340e0004ca的父母,无论他们身在何处。
例如,这应该是有效的(最新的Mongo):
db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}});
PHP中的或equaly(最新的驱动程序等):
$mongodb->nodes->update(array(),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca")))));
两者都没有做任何事情!
另一方面:
db.nodes.update({"_id": ObjectId("4e90cb3cd68417740c000017")},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}});
PHP中的或equaly:
$mongodb->nodes->update(array('_id' => new MongoId("4e90cb3cd68417740c000017"),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca")))));
工作得很好!这是一个错误吗?在我的子文档中使用MongoID对象的“id”而不是“_id”是一个问题吗?在此先感谢您的帮助!
答案 0 :(得分:3)
您是否尝试在更新命令
上启用multi flagdb.collection.update( criteria, objNew, upsert, multi )
multi - 表示是否应更新所有匹配条件的文档而不是仅更新一个。对于下面的$运算符非常有用。
并将您的查询更改为
db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true);
或
db.nodes.update({ "_id" : { $exists : true } },{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true);
我自己没有测试过代码,但我相信上面的任何一个都可以运行..