Intereting Posts
Как создать файл xlsx без использования какой-либо библиотеки excel PHP Проверка нескольких значений strpos Объединение нескольких массивов по индексу PHP7, установленный Homebrew, не работает с Apache на macOS FB SDK и cURL: Неизвестная ошибка протокола SSL в связи с graph.facebook.com:443 Как я могу вернуть результаты поиска mysql, где отображаются только столбцы с ненулевыми элементами простой анализатор html dom, чтобы вернуть все значения td`s? Как автоматически выйти из системы при закрытии браузера? логин на сайте без пароля и имени пользователя использовать пользовательскую форму активный домен каталога Получить идентификатор видео YouTube с помощью встроенного кода iframe php file_get_contents и & amp; Как сохранить строку html5 Canvas.toDataURl как png на php-сервере Как обращаться с адресами IPv6 вместе с IPv4 PHP Как сгенерировать фрагмент, подобный тем, которые генерируются Google с помощью PHP и MySQL? Зарегистрировать IP-адрес пользователя, дату и время

Поля обновления MongoDB во вложенном массиве

Поля обновления MongoDB во вложенном массиве

Как я могу установить «play» для «воспроизведения фото» в массиве фотографий?

Я знаю только его _id.

"_id": ObjectId("4f41a5c7c32810e404000000"), "albums": [ { "_id": ObjectId("4f545d1bc328103812000000"), "name": "album1" , "photos":[{ "_id": ObjectId("4f545d1bc328103812d00000"), "name":"travel photo" },{ "_id": ObjectId("4f545d1bc328103812c00000"), "name":"play" }] }, { "_id": ObjectId("4f545f56c328103c12000000"), "name": "album2" }, { "_id": ObjectId("4f545f68c328103012000000"), "name": "album3" }, { "_id": ObjectId("4f546642c328103c12000001"), "name": "album4" }] 

Вы не можете. Оператор позиционирования доступен только для первого массива в иерархии документов. Таким образом, вы не можете манипулировать отдельными элементами более глубоких массивов гнезд.

Это известная проблема и планируется для разработки здесь: https://jira.mongodb.org/browse/SERVER-831

До тех пор вам придется немного нормализовать вашу схему, я боюсь.

Tonilin You Cant Обновите этот тип массива непосредственно для этого, вам нужно найти индекс этого массива, в который вы хотите обновить, например, если вы хотите обновить name как play photo тогда вам нужно найти индекс photos котором play имя. Для этого я использовал этот код:

 $m = new Mongo(); $db=$m->yourdatabase; //testarray is my collection name $result=$db->testarray->find(); $index=''; foreach($result as $res) { if(array_key_exists("albums",$res)) { foreach($res['albums'] as $ralbum) { if(array_key_exists("photos",$ralbum)) { foreach($ralbum['photos'] as $k=>$rphotos) { if(array_key_exists("name",$rphotos)) if($rphotos['name']=='play') $index=$k; } } } } } //echo $index; 

// Теперь для обновления этого значения в вашей базе данных используйте этот код …

 if($index!=='') { //Run like this in Shell //db.testarray.update({"albums.photos._id":ObjectId("4f545d1bc328103812d00000")},{'$set':{"albums.$.photos.1.name":"play132"}}) $condition=array("albums.photos._id"=>new MongoId("4f545d1bc328103812d00000")); $data=array('$set'=>array("albums.$.photos.".$index.".name"=>"play photo")); $result=$db->testarray->update($condition,$data); $status=$db->Command(array('getlasterror'=>1)); print_r($status); }