Jika Anda mengetahui indeks dalam array, Anda dapat mengakses elemen array secara langsung menggunakan notasi titik.
update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)
Pastikan Anda membungkus jalur bernotasi titik dalam tanda kutip sebagai string.
Sunting:
Untuk memberikan detail lebih lanjut tentang bagaimana ini bisa bekerja secara dinamis, saya akan memberikan contoh di PHP:
$action = array("columns.$colNum.panels.$panelNum" => $newValue);
Ya ada operator posisi , tetapi tampaknya tidak cukup mahir untuk mengubah array di dalam array, ini dapat berubah di MongoDB 1.7.0
Ada alternatif yang dapat Anda lakukan daripada mencoba memasukkan informasi ini ke dalam dokumen bersarang. Cobalah untuk meratakannya. Anda dapat membuat koleksi yang memiliki objek panel &kolom:
objek kolom:
{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}
objek panel:
{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}
Kemudian Anda dapat menemukan semua kolom milik pengguna dengan melakukan:
find({ type: 'column', user:'username'});
Anda dapat menemukan semua panel untuk kolom tertentu dengan melakukan:
find({type: 'panel', columnOwner:'ownerID'});
Karena setiap kolom dan panel akan memiliki ID unik yang diberikan oleh MongoDB, Anda dapat dengan mudah menanyakan dan mengatur opsi secara atom.
update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});