sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Collection-uppdatering:initiera ett dokument med standardvärden

Jag och mina kollegor hittade en lösning. Vi kan kalla det trestegsinitiering .

Kom ihåg att MongoDB garanterar atomiciteten av operationer på ett enda dokument. Med detta faktum i åtanke kan vi arbeta på följande sätt:

  1. Försök att uppdatera dokumentet, öka räknarna ordentligt vid en angiven tidsbit. Gör inga uppror, bara en gammaldags uppdateringsoperation. Kom ihåg att exekveringen av en uppdateringssats returnerar antalet skrivna dokument. Om antalet skrivna dokument är större än noll är du klar.
  2. Om antalet dokument som skrivs av uppdateringen är noll, betyder det att det relativa dokumentet som ska uppdateras ännu inte finns i samlingen. Försök att infoga hela dokumentet för de angivna taggarna. Sätt alla räknare (fältvärden) till noll. Även utförandet av en infogningssats returnerar antalet skrivna dokument. Om den returnerar noll eller ger ett undantag, strunt i:det betyder att någon annan process redan hade infogat dokumentet för samma taggar.
  3. Utför samma uppdatering ovan igen.

Koden ska se ut som något som liknar följande kodavsnitt.

// Firt of all, try the update
var result = db.test.update(
  {timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"), type: “memory_used”},
  {$inc: {"values.39": 1}},
  {upsert: false}
);
// If the update do not succeed, then try to insert the document
if (result.nModified === 0) {
  try {
    db.test.insert(/* Put here the whole document */);
  } catch (err) {
    console.log(err);
  }
  // Here we are sure that the document exists.
  // Retry to execute the update statement
  db.test.update(/* Same update as above */);
}

Ovanstående procedur fungerar om en förutsättning innehåller:_id värde ska härledas från andra fält i dokumentet. I vårt exempel, _id värde skulle vara '2013-10-10T23:06:00.000Z-memory_used . Endast med denna teknik kommer insättningen vid punkt 2. att misslyckas korrekt.




  1. MongoDB - Fel:ogiltigt schema, förväntat mongodb

  2. Hur den primära servern nere kommer att hanteras automatiskt i mongodb-replikering

  3. Uppdatera bild med collectionfs

  4. MongoDB C# Query Array av objekt som innehåller ett egenskapsvärde