Donc, je suis assez nouveau à mongoDb donc je pense que cela pourrait être un malentendu sur l'utilisation générale. alors sois indulgent avec moi. J'ai un schéma de document, je travaille comme telmongoDB: index unique sur une valeur répétée
{
name: "bob",
email: "[email protected]",
logins: [
{ u: 'a', p: 'b', public_id: '123' },
{ u: 'x', p: 'y', public_id: 'abc' }
]
}
Mon problème est que je dois veiller à ce que les ids publics sont uniques dans un document et de collecte, De plus il y a des enregistrements existants en cours de migration de une base de données MySQL qui n'a pas d'enregistrements, et sera donc remplacée par des valeurs null
dans mongo.
je me dis que son soit un indice
db.users.ensureIndex({logins.public_id: 1}, {unique: true});
qui ne fonctionne pas à cause des clés manquantes et jette un E11000 duplicate key error index:
ou c'est un problème de schéma plus fondamental que je ne devrais pas soit imbriquer des objets dans une structure de tableau comme ça. Dans quel cas, quoi? une collection séparée pour les user_logins ??? ce qui semble aller à l'encontre de l'idée d'un document incorporé.
Malheureusement, je me trompe. [corrigé], j'ai besoin de cela pour travailler sur les insertions et les mises à jour. Je pense que $ addToSet ne fonctionnera qu'avec les mises à jour. En outre, il doit être implémenté par requête plutôt que comme une contrainte de base de données. – Roon
@Roon: lire sur 'upsert': http: //www.mongodb.org/display/DOCS/Mise à jour –
L'utilisation de la condition upsert impliquerait également de faire des mises à jour, ce qui pourrait être utile pour vérifier si public_id existe déjà dans les docs imbriqués en cas de différences entre u et p. Je pense qu'il n'y a pas de solution sauf de stocker les docs imbriqués dans leur propre collection et en utilisant le champ _id ou un index alternatif pour implémenter la restriction en tant que contrainte db. – proximus