MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment $ définir les éléments de sous-sous-tableau dans MongoDB

Si vous connaissez l'index dans le tableau, vous pouvez accéder directement à l'élément du tableau en utilisant la notation par points.

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

Assurez-vous d'encadrer le chemin noté par des points entre guillemets sous forme de chaîne.

Modifier :

Pour donner plus de détails sur la façon dont cela pourrait fonctionner dynamiquement, je vais donner un exemple en PHP :

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

Oui, il y a l'opérateur de position , mais il ne semble pas assez avancé pour changer les tableaux dans les tableaux, cela peut changer dans MongoDB 1.7.0

Il existe une alternative que vous pouvez faire au lieu d'essayer de mettre ces informations dans un document imbriqué. Essayez de l'aplatir. Vous pouvez créer une collection contenant des objets panneau et colonne :

objet colonne :

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

objet panneau :

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

Ensuite, vous pouvez trouver toutes les colonnes appartenant à un utilisateur en faisant :

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

Vous pouvez trouver tous les panneaux d'une colonne spécifique en faisant :

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

Étant donné que chaque colonne et panneau aura un identifiant unique attribué par MongoDB, vous pouvez facilement interroger et définir des options de manière atomique.

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