2014-10-01 5 views
0

Я пытаюсь обновить значение в документе, и я не видел примера, который показывает мне, что мне нужно делать. Вот как выглядит мой документ:Обновление массива вложенных объектов Mongo

{ 
    "_id" : ObjectId("5429e8a53150d03d541c7a53"), 
    "foo" : { 
     "bar" : { 
      "0" : { 
       "email" : { 
        "0" : "[email protected]" 
       } 
      } 
     } 
    } 
} 

Это, конечно, не мой реальный объект, а представляет собой структуру. как мне обновить [email protected], чтобы быть [email protected]?

Также как бы удалить этот же элемент?

Также (для пунктов с булочками), как бы я обновил это, используя класс php Mongo?

+0

Вы используете какую-либо библиотеку PHP для взаимодействия с возвращаемыми объектами mongo json? – Jason

+0

Приложение, в котором я работаю, использует это: http://php.net/manual/en/class.mongo.php, который я знаю, устарел, но я предполагаю, что остальная часть приложения также полагается на него, поэтому изменение это не всегда легко. Была попытка написать обертку вокруг этого класса, но это было сделано не очень хорошо, поэтому я бы предпочел избежать этого. –

+0

FYI, это была моя первая попытка, которая не сработала: db.test.update ({"foo.bar.0": "email"}, {$ set: {"0": "[email protected]" }}); –

ответ

0

Хорошо, я понял. Это, как вы делаете это в консоли:

db.test.update({"foo.bar.0.email" : {"0":"[email protected]"} },{$set:{"foo.bar.0.email.0":"[email protected]"}}); 

И это, как вы делаете это в PHP с помощью класса Монго

$db = new Mongo("connection stuff"); 

$condition = array('foo.bar.0.email' => array('0' => '[email protected]')); 
$data = array('$set' => array('foo.bar.0.email.0' => '[email protected]')); 

$db->test->update($condition, $data); 

Я надеюсь, что это помогает кому-то, потому что мне потребовалось несколько часов, чтобы фигуры это из.