sql >> Database >  >> NoSQL >> MongoDB

maak een mongodb-document met subdocumenten atomair?

Update met upsert=true kan worden gebruikt om een ​​atomaire "insert or update" uit te voeren (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag ).

Als we er bijvoorbeeld zeker van willen zijn dat een document in Front-collectie met een specifieke url precies één keer wordt ingevoegd, kunnen we zoiets uitvoeren als:

db.Front.update(
    {url: 'http://example.com'},
    {$set: {
       url: 'http://example.com'},
       found: true
    }
)

Bewerkingen op een enkel document in MongoDB zijn altijd atomair. Als u updates maakt die meerdere documenten omvatten, is er geen atomiciteit gegarandeerd. In dergelijke gevallen kun je je afvragen:heb ik echt nodig dat de operaties atomair zijn? Als het antwoord nee is, zult u waarschijnlijk uw weg vinden in het werken met mogelijk inconsistente gegevens. Als het antwoord ja is en je bij MongoDB wilt blijven, bekijk dan het ontwerppatroon op Tweefasenverplichtingen .




  1. JSON-bestand importeren met mongimport, krijg steeds `onverwachte identifier`?

  2. Maak een voorwaardelijke TTL in mongo

  3. Krijg een foutmelding, Fout:kan geen verbinding maken met server 127.0.0.1 shell/mongo.js &bij het proberen om mongodb uit te voeren op mac osx lion

  4. vraag met mangoest