Jeśli znasz indeks w tablicy, możesz uzyskać bezpośredni dostęp do elementu tablicy za pomocą notacji kropkowej.
update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)
Upewnij się, że ujmujesz ścieżkę zapisaną kropką w cudzysłowie jako ciąg.
Edytuj:
Aby podać więcej szczegółów na temat tego, jak to może działać dynamicznie, podam przykład w PHP:
$action = array("columns.$colNum.panels.$panelNum" => $newValue);
Tak, istnieje operator pozycyjny , ale nie wydaje się wystarczająco zaawansowany aby zmienić tablice w tablicach, może się to zmienić w MongoDB 1.7.0
Istnieje alternatywa, którą możesz zrobić zamiast próbować umieścić te informacje w zagnieżdżonym dokumencie. Spróbuj to spłaszczyć. Możesz utworzyć kolekcję zawierającą obiekty paneli i kolumn:
obiekt kolumny:
{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}
obiekt panelu:
{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}
Następnie możesz znaleźć wszystkie kolumny należące do użytkownika, wykonując:
find({ type: 'column', user:'username'});
Możesz znaleźć wszystkie panele dla określonej kolumny, wykonując:
find({type: 'panel', columnOwner:'ownerID'});
Ponieważ każda kolumna i panel będą miały unikalny identyfikator nadany przez MongoDB, możesz łatwo wyszukiwać i niepodzielnie ustawiać opcje.
update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});