2013-09-08 2 views
0

je suit index:mangouste compund index unique ne fonctionne pas

PaymentSchema.index({ driver_id: 1, year: 1, month: 1 },{ unique: true }); 

Je veux cette collection de tenir un seul enregistrement pour chaque combinaison différente des champs driver_id, year and month. Je veux mettre à jour la collection avec l'option upsert:

var query = { 
     driver_id: req.params.driver_id, 
     year: req.params.year, 
     month: req.params.month, 
     amount: req.params.old_value 
    }; 

    var update = { 
     $set: { 
      amount: req.params.new_value 
     } 
    }; 

    var options = { 
     upsert: true 
    }; 

    Payment.update(query,update,options,function(err,rows){ 
     if(err) return next(err); 
     res.json({}); 
    }); 

donc ce que je veux est d'actualiser le document avec une clé unique donné (driver_id + année + mois) et avec la condition supplémentaire amount = .... Si les conditions de requête sont correctes, le document doit être mis à jour - et cela fonctionne. Si le document n'est pas trouvé selon ces conditions et que le document avec l'index unique n'existe pas, il est créé. Mais s'il existe un document avec un index unique (seule la condition de quantité est incorrecte), un nouveau document est créé avec le même index unique (driver_id + year + month). C'est étrange parce que j'ai déclaré un index unique sur ces 3 champs (driver_id + year + month) et je peux voir dans mongoshell qu'il existe deux documents avec ces mêmes champs ...

+0

Pouvez-vous ajouter à votre question issue de 'getIndexes': http://docs.mongodb.org/manual/reference/method/db.collection.getIndexes/ – WiredPrairie

Répondre

0

Résolu: J'ai dû redémarrer mongod et supprimer la base de données (probablement l'option reindex fonctionnerait aussi).