sql >> Database >  >> NoSQL >> MongoDB

Het is niet mogelijk om een ​​mongodb-document te vergrendelen. Wat als ik dat nodig heb?

Hé, de enige manier waarvan ik denk dat het nu is om een ​​statusparameter toe te voegen en de bewerking findAndModify() te gebruiken, waarmee je een document atomair kunt wijzigen. Het is een beetje langzamer, maar zou het lukken.

Laten we dus zeggen dat u een statuskenmerk toevoegt en wanneer u het document ophaalt, de status wijzigt van "IDLE" in "VERWERKING". Vervolgens werkt u het document bij en slaat u het weer op in de collectie, waarbij u de status opnieuw wijzigt naar "IDLE".

Codevoorbeeld:

var doc = db.runCommand({
              "findAndModify" : "COLLECTION_NAME",
              "query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
              "update" : {"$set" : {"status" : "RUNNING"} }
}).value

Wijzig de COLLECTION_NAME en ID_DOCUMENT in een juiste waarde. Standaard retourneert findAndModify() de oude waarde, wat betekent dat de statuswaarde nog steeds IDLE is aan de clientzijde. Dus als u klaar bent met updaten, slaat u alles opnieuw op/werkt u het opnieuw bij.

Het enige dat u moet weten, is dat u slechts één document tegelijk kunt wijzigen.

Ik hoop dat het helpt.



  1. Mongodb $lookup Werkt niet met _id

  2. hoe lees je alle bytes die op een tcp-verbinding komen?

  3. Matrix-subset in aggregatieframework-pijplijn

  4. mongodb $bestaat altijd terugkerende 0