2

我有这样的节点:

[_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 中相等(最新驱动程序等):

$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 中相等:

$mongodb->nodes->update(array('_id' => new MongoId("4e90cb3cd68417740c000017"),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca")))));

工作得很好!这是一个错误吗?我在子文档中对 MongoID 对象使用“id”而不是“_id”是否有问题?提前感谢您的帮助!

4

1 回答 1

3

您是否尝试过在更新命令上启用多标志

db.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);

i haven't tested the code myself, but am sure that any one of the above will work..

于 2011-10-09T09:22:09.907 回答