MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come $impostare elementi di sotto-sottoarray in MongoDB

Se conosci l'indice nell'array puoi accedere all'elemento dell'array direttamente usando la notazione del punto.

update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)

Assicurati di racchiudere il percorso tra virgolette tra virgolette come una stringa.

Modifica:

Per fornire maggiori dettagli su come potrebbe funzionare dinamicamente, fornirò un esempio in PHP:

$action = array("columns.$colNum.panels.$panelNum" => $newValue);

Sì, esiste l'operatore posizionale , ma non sembra essere sufficientemente avanzato per modificare gli array all'interno degli array, questo potrebbe cambiare in MongoDB 1.7.0

C'è un'alternativa che puoi fare invece di provare a inserire queste informazioni in un documento nidificato. Prova ad appiattirlo. Puoi creare una raccolta con oggetti pannello e colonna:

oggetto colonna:

{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}

oggetto pannello:

{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}

Quindi puoi trovare tutte le colonne che appartengono a un utente facendo:

find({ type: 'column', user:'username'});

Puoi trovare tutti i pannelli per una colonna specifica facendo:

find({type: 'panel', columnOwner:'ownerID'});

Poiché ogni colonna e pannello avrà un ID univoco fornito da MongoDB, puoi facilmente eseguire query e impostare le opzioni in modo atomico.

update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});