Pokud znáte index v poli, můžete k prvku pole přistupovat přímo pomocí tečkové notace.
update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)
Ujistěte se, že jste cestu označenou tečkami uzavřeli do uvozovek jako řetězec.
Upravit:
Abych uvedl více podrobností o tom, jak by to mohlo fungovat dynamicky, uvedu příklad v PHP:
$action = array("columns.$colNum.panels.$panelNum" => $newValue);
Ano, existuje poziční operátor , ale to Zdá se, že není dost pokročilé pro změnu polí v polích se to může změnit v MongoDB 1.7.0
Existuje alternativa, kterou můžete udělat, místo abyste se pokoušeli nacpat tyto informace do vnořeného dokumentu. Zkuste to srovnat. Můžete vytvořit kolekci, která má panely a objekty sloupců:
sloupcový objekt:
{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}
objekt panelu:
{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}
Poté můžete najít všechny sloupce, které patří uživateli, takto:
find({ type: 'column', user:'username'});
Všechny panely pro konkrétní sloupec najdete takto:
find({type: 'panel', columnOwner:'ownerID'});
Vzhledem k tomu, že každý sloupec a panel bude mít jedinečné ID přidělené MongoDB, můžete snadno dotazovat a atomicky nastavit možnosti.
update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});