2017-03-17 5 views
0

Je mets à jour une valeur dans un tableau. Mais, je veux que la mise à jour valide que la valeur ne peut pas être inférieure à zéro.Mise à jour avec Mongodb conditionnel

{ 
    _id: ObjectId(), 
    items: [ 
    { 
     _id: ObjectId(), 
     stock: 5 
    } 
    ] 
} 

Dans ce cas, si je veux réduire le stock de -6. J'ai besoin que la requête soulève une exception ou quelque chose de similaire.

J'essayais avec deux requêtes. Un pour connaître la valeur réelle et ensuite si la soustraction était> 0, j'ai fait la mise à jour.

Existe-t-il un moyen de créer une requête?

+0

Pourquoi ne pas vérifier l'état dans l'instruction select: var valeur = 100; db.users.update ({ "name": "xyz", "note": { "$ gt": valeur}} , { $ set: { "score": value}} ) Pour – Barney

+0

cela, j'ai besoin de connaître l'index du document dans le tableau. Comment puis-je l'obtenir dynamiquement? –

Répondre

0

Vous pouvez profiter du fait que ObjectId est unique pour chaque élément du tableau et utilisez le $ opérateur de mise à jour de position pour le faire magnifiquement

from bson.objectid import ObjectId 

collection.update_one(
    {"items": { 
     "$elemMatch": { 
      "_id" : ObjectId("58ccc8c2dbe8051261b38e58"), 
      "stock": {"$gt": 0 } 
     } 
    }}, 
    {"$inc": {"items.$.stock": -6 }} 
)