sql >> Database >  >> NoSQL >> MongoDB

Is er een manier om twee collecties in MongoDB atomair bij te werken?

Er zijn hier veel antwoorden, maar ik wil hier alle lege plekken invullen:

Is er een manier om twee collecties in MongoDB atomair bij te werken?

Nee. Atoomupdate van twee collecties is in feite een transactie. MongoDB ondersteunt geen transacties tussen collecties of zelfs binnen een collectie.

MongoDB biedt verschillende modifiers die atomair zijn op een enkel document. U kunt dus meerdere verschillende variabelen tegelijk verhogen ($inc ). Hoewel er hier enkele beperkingen zijn, kunt u niet twee verschillende bewerkingen uitvoeren op een enkele eigenschap.

Is er een manier om voorwaardelijk iets in de ene verzameling te veranderen op basis van de resultaten van een andere verzameling in één keer?

Er zijn hier enkele documenten over atoomupdates in het algemeen. Wat je echter echt nodig hebt, is een wachtrij en een of andere vorm van commit in twee fasen of je hebt triggers nodig.

Triggers zijn nog niet geïmplementeerd, dus het is niet echt een optie in jouw geval.

Er is een mogelijkheid dat het bericht tussen die acties door als gelezen wordt gemarkeerd, dan zal ik het aantal "ongelezen" onjuist verlagen.

Op dit moment heb je een aantal verschillende strategieën om dit met een zekere mate van consistentie te laten werken. Eerlijk gezegd, op basis van je beschrijving, wil je misschien onderzoeken om een ​​eenvoudige wachtrij te maken die je totalen bijwerkt.



  1. Gebruik globaal een JsonConverter voor een klasse zonder het attribuut

  2. Hadoop-kaart/verkleinen vs ingebouwde kaart/verkleinen

  3. Mongodb update diep genest subdocument

  4. mongodb documenten van de ene collectie naar de andere collectie verplaatsen