Comment $sous-sous-sous-éléments de tableau dans MongoDB
Je suis le développement d'une webapp qui dispose d'un portail-ish composante (penser comme plusieurs panneaux qui peuvent être des médicaments, autour d'une colonne à l'autre et ajoutés ou supprimés). J'utilise MongoDB pour stocker ces informations dans un format comme si...
{
_id: ObjectId(...),
title: 'My Layout',
columns: [
{
order: 1,
width: 30,
panels: [
{ title: 'Panel Title', top: 100, content: '...' },
{ title: 'Panel Title', top: 250, content: '...' },
]
},
{
... multiple columns ...
}
]
}
Je suis d'essayer d'utiliser atomique/modificateur opérations avec mise à jour() et cela devient confus. Si je voulais juste mettre à jour une propriété spécifique d'un panneau, comment dois-je faire référence?
update(
{ _id: ObjectId(...) },
{ $set: { columns.[???].panels.[???].top: 500 }
)
OriginalL'auteur T. Stone | 2010-08-13
Vous devez vous connecter pour publier un commentaire.
Si vous connaissez l'index dans le tableau, vous pouvez accéder à l'élément du tableau directement à l'aide de la notation point.
Assurez-vous d'envelopper le point noté chemin d'accès entre guillemets, comme une chaîne de caractères.
Edit:
À donner plus de détails sur la façon dont cela pourrait fonctionner de manière dynamique, je vais vous donner un exemple en PHP:
Oui, il y a la opérateur de position, mais il ne semble pas être suffisamment avancé pour modifier des tableaux dans des tableaux, cela peut changer dans MongoDB 1.7.0
Il y a une alternative que vous pouvez faire au lieu d'essayer de faire rentrer ces informations dans un ensemble de documents. Essayez d'aplatir. Vous pouvez créer une collection qui a du panneau & la colonne objets:
colonne de l'objet:
panneau de l'objet:
Alors vous pouvez trouver toutes les colonnes qui appartiennent à un utilisateur en faisant:
Vous pouvez trouver tous les panneaux d'une colonne spécifique en faisant:
Puisque chaque colonne et le jury aura un ID unique donné par MongoDB, vous pouvez facilement effectuer une requête et atomiquement de définir les options.
ajout de détails
OriginalL'auteur Klinky
Moi aussi j'avais ce genre de situation, j'ai suivi $addToSet après $tirez-le pour le remplacer j'.e mise à jour de ce dont j'avais besoin.
Puis retirez l'ancienne valeur
"$" Est un espace réservé pour mettre à jour le premier élément qui correspond à la condition de requête dans une mise à jour. veuillez consulter la docs.mongodb.com/manual/reference/operator/update/positional/...
OriginalL'auteur achuth