sql >> Databáze >  >> NoSQL >> MongoDB

Jak $set sub-sub-array položky v MongoDB

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}});


  1. MongoDB - mongofiles

  2. Jaká je režie Java ORM pro MongoDB

  3. jak vypočítat počet a jedinečný počet přes dvě pole ve funkci mongo snížení

  4. Sečtěte všechny hodnoty stejnojmenných polí dokumentů v kolekci