Remplacement de document incorporé dans la matrice de dans MongoDB
Est-il un moyen facile de remplacer l'ensemble d'un document incorporé dans un tableau?
Dire le remplacement des
{
"_id" : "2",
"name" : "name2",
"xyz..." : "xyz2..."
}
avec:
{
"_id" : "2",
"name" : "name6",
"xyz..." : "xyz5..."
"morefields..." : "fields..."
}
La recherche de _id (embedded). Ou dois-je remplacer chaque champ individuellement à l'aide de $?
{
"_id" : "2",
"users" : [{
"_id" : "1",
"name" : "name1",
"xyz..." : "xyz1..."
}, {
"_id" : "2",
"name" : "name2",
"xyz..." : "xyz2..."
}],
"name" : "main name"
}
OriginalL'auteur Fredrik L | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le "tableau d'objets". Vous pouvez utiliser le opérateur de position, il devrait ressembler à quelque chose comme ceci:
Dans mon expérience, le "tableau d'objets" tendance n'est pas optimale si les objets ont un naturel ID. Dans votre cas, cela peut être modélisé comme suit:
Dans ce cas, vous pouvez utiliser le la notation point de facilement mettre à jour l'élément que vous voulez.
Je pensais que les utilisateurs.2 d'après le tableau de position, mais c'est en fait à l'aide de l'id (et les retours à vide des crochets pour tous les autres éléments de tableau}, cool.
MongoDB reconnaît les tableaux dans une requête. Donc
users.2
pouvait effectuer une recherche par le biais de lausers
tableau à la recherche d'objets aveckey
de2
ou ça pourrait ressembler à lakey:2
deusers
.J'allais avec votre deuxième modèle, mais maintenant, je pense que je ne vais pas être en mesure de l'indice de l'intérieur du nom de domaine. Si c'était un tableau, il serait d'utilisateurs.nom mais ici c'est les utilisateurs.1.nom des utilisateurs.2.nom?
Vous avez raison, la deuxième structure n'indexe pas très bien. C'est certainement un compromis. Mais vous ne pouvez pas optimiser pour toutes les requêtes avec MongoDB. Si vous voulez que cette requête doit être rapide, alors vous avez à faire des compromis facilité de mise à jour.
OriginalL'auteur Gates VP