所以我得到了这个类似于
的嵌入式结构{
"_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))
));
删除元素,但这不起作用......
谢谢!
答案 0 :(得分:3)
要从演示文稿中提取幻灯片,您的语法应为
db.coll.update({_id:presId},{$pull:{"slides._id": slidesId}}
要从幻灯片中提取元素,您需要匹配适当的幻灯片并使用位置运算符:
db.coll.update({ "_id": presId, "slides._id":slidesId},
{$pull: {"slides.$.elements":{"_id":elementId"}}})
我会测试第二个 - 不允许对数组中的嵌入式数组执行某些操作。