使用PHP删除嵌入的MongoDB文档

时间:2013-11-24 19:01:27

标签: php mongodb

所以我得到了这个类似于

的嵌入式结构
{
    "_id" : ObjectId("529246fe6803fa2f1c16b7a7"),
    "title" : "presentation 0",
    "description" : "It's an awesome presentation about presentations, dawg!",
    "timestamp" : " 20:32:03",
    "slides" : [ 
        {
            "_id" : ObjectId("529246fe6803fa2f1c16b7a8"),
            "elements" : [ 
                {
                    "_id" : ObjectId("529246fe6803fa2f1c16b7a9"),
                    ...
                },
                ...
       },
       ...
}

我的根元素是演示文稿。

现在我希望能够使用它们删除幻灯片和元素。

我用

$result = $collection->update(
        array('_id' => $presentationId),
        array('$pull' => array('slides' => array('_id' => $slideId))
        ));

删除可用的幻灯片。

我试过

$result = $collection->update(
        array('_id' => $presentationId),
        array('$pull' => array('slides.elements' => array('_id' => $elementId))
        ));

删除元素,但这不起作用......

谢谢!

1 个答案:

答案 0 :(得分:3)

要从演示文稿中提取幻灯片,您的语法应为

db.coll.update({_id:presId},{$pull:{"slides._id": slidesId}}

要从幻灯片中提取元素,您需要匹配适当的幻灯片并使用位置运算符:

db.coll.update({ "_id": presId, "slides._id":slidesId},
{$pull: {"slides.$.elements":{"_id":elementId"}}})

我会测试第二个 - 不允许对数组中的嵌入式数组执行某些操作。