2013-11-24 3 views
2

, так что я получил эту встроенную структуру, которая выглядит примерноУдалить встроенный MongoDB документ с помощью PHP

{ 
    "_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)) 
     )); 

для удаления элементов, но это не работает ...

Спасибо!

ответ

3

Чтобы вытащить слайд из презентации вашего синтаксис должен быть

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

Чтобы вытащить элемент из слайда должен соответствовать соответствующему слайду и использовать позиционный оператор:

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

Я бы протестировать второй - некоторые операции с встроенными массивами внутри массивов не допускаются.

+0

спасибо! в PHP это db.coll.update ({_id: presId, "slides._id": slidesId}, {$ pull: {"slides. $. Elements": {"slides.elements._id": elementId "} }}) – tpei

+0

Не то, что я сказал? :) –

+0

О, извините, я имел в виду в PHP это db.coll.update ({_id: presId, "slides._id": slidesId}, {$ pull: {"слайды . $. elements ": {" _ id ": elementId"}}}) – tpei

Смежные вопросы