2010-11-19 53 views
1

des heures que je suis en train d'ajouter des données en vrac dans ma collection MongoDB de configuration localement, tout est mis à l'exception index unique pour une ou plusieurs touches :(MongoDB: ensureIndex ne fonctionne pas sur les deux seule clé et les clés composites

I ai utilisé ceci:

ensureIndex({appid:1, userid:1}, {unique:true, dropDups:true, background:true}) 

alors ce (coz je suppose que pour une raison quelconque, l'index multiples clés ne fonctionne pas)

ensureIndex({userid:1}, {unique:true, dropDups:true, background:true}) 

après avoir utilisé ci-dessus lignes j'essayé d'insérer des millions de lignes de un script PHP (via à la fois insert et batchInsert) et chaque fois que les ID utilisateurs en double sont là: '(s'il vous plaît guidez moi sur ceci :(

+0

Salut! Avez-vous réussi à faire fonctionner cela à la fin? J'ai le même problème, ou je pense au moins. Je peux cependant appliquer des index en définissant 'background: true' lors de l'exécution de l'administrateur de la console Mongo. Avez-vous essayé cela? – Industrial

Répondre

0

Il est probablement une bonne idée de regarder et de s'assurer que l'index a été créé. Par défaut, les opérations d'écriture (comme la création d'index) sont du type "fire-and-forget" et n'attendent pas erreur/succès. Cela pourrait être un bug dans le pilote (php client lib).

Vous pouvez exécuter

db.coll.getIndexes() 

à la liste des index pour la collection.

+0

Je pensais exactement la même chose, son client PHP coz, coz à la ligne de commande les index sont en train de créer correctement et lance aussi des erreurs sur les doublons, mais là encore un attribut mystérieux pour dropDups ... quel est le but de cet attribut ne pas gérer les doublons et les supprimer selon la définition? choses étranges :-) –

+0

btw, j'utilise RockMongo donc en même temps je peux voir la création d'index lors de l'insertion d'enregistrements (dans mon cas), mais ils ne fonctionnent pas pour les doublons ... –

1

J'ai remarqué que ensureIndex n'écrase pas un index existant. Au lieu de cela, je crois que vous devez d'abord supprimer l'index existant et ensuite lancer le programme ensureIndex.