update traverse the positional part operator cannot array mongodb mongodb-php

traverse - Mongodb $ push en una matriz anidada



update array mongodb (2)

¡De esta manera funcionó para mí!

"playlists. $ []. musics":

db.collection.update( { "_id": ID, "playlists._id": "58"}, { "$push": {"playlists.$[].musics": { "name": "test name", "duration": "4.00" } } } )

https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#position-nested-arrays-filtered

Quiero agregar nuevos datos a mi matriz anidada

Mi documento es:

{ "username": "erkin", "email": "[email protected]", "password": "b", "playlists": [ { "_id": 58, "name": "asdsa", "date": "09-01-15", "musics": [ { "name": "INNA - Cola Song (feat. J Balvin)", "duration": "3.00" }, { "name": "blabla", "duration": "3.00" } ] } ] }

Quiero agregar música en esta sección de la lista de reproducción:

{ "username": "erkin", "email": "[email protected]", "password": "b", "playlists": [ { "_id": 58, "name": "asdsa", "date": "09-01-15", "musics": [ { "name": "INNA - Cola Song (feat. J Balvin)", "duration": "3.00" }, { "name": "blabla", "duration": "3.00" }, { "name": "new", "duration": "3.00" } ] } ] }

Esto es lo que probé:

$users->update( array( ''_id'' => new MongoId (Session::get(''id'')), ''playlists._id'' => $playlistId ), array( ''$push'' => array(''playlists.musics'' => array( ''name'' => ''newrecord'', ''duration'' => ''3.00'' )) ) );


Probablemente algo como esto donde ID es su ObjectId. Los primeros {} son necesarios para identificar su documento. No es necesario usar un ObjectId siempre que tenga otro identificador único en su colección.

db.collection.update( { "_id": ID, "playlists._id": "58"}, { "$push": {"playlists.$.musics": { "name": "test name", "duration": "4.00" } } } )