Ha egy collection-ben a dokumentumunk egyik propertyje egy tömb, akkor kicsit kacifántosabb egy tömbön belüli elem lekérdezése és frissítése. A lekérdezésre ott van a map/reduce funkció. A frissítésre pedig használhatjuk a már megszokott update függvényt a positional operator-al ötvözve. Böngésztem a netet, de én hasonló példát nem láttam, úgyhogy lássuk! Tegyük fel, hogy a következő struktúránk van a photos collection-ben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { "userId": 1, "albums": { "1": { albumDefault: 1, photos: [{ photoId: 1, photoDescription: "Alma" ... }, { photoId: 2, photoDescription: "Körte" ... }{ photoId: 3, photoDescription: "Barack" ... }] } } } |
Ha szeretnénk módosítani pl. a 3-as photoId-vel rendelkező kép leírását, akkor a következő utasítással érhetjük el:
1 2 3 4 5 6 7 8 | db.photos.update({ "userId": 1, "albums.1.photos.photoId": 3 }, { "$set": { "albums.1.photos.$.photoDescription": "Szőlő" } }); |
És egy megvalósítás php-ben is:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $mongo = new Mongo(); $db = $mongo->test_db; $photos = $db->photos; $condition = array( "userId" => 1, "albums.1.photos.photoId" => 3 ); $fieldToUpdate = array( "$set" => array( "albums.1.photos.$.photoDescription" => "Szőlő" ) ); $photos->update($condition, $fieldToUpdate); |