MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Актуализиране на речника в Mongodb

Не сте сигурни какво точно искате. По същество има два типа актуализации в MongoDB:можете да извършите атомарна актуализация или заменете документа .

Подмяната на документа често е по-лесна , защото ви позволява да използвате стандартни C# операции за извършване на модификации и ще преоценява генерираните свойства и други подобни:

var user = new User { Name = "John Doe", Quests = 
   new Dictionary<string, Tuple<string, string>> { 
       { "hoho", new Tuple<string, string>("A", "A-Item") } } };
users.InsertOneAsync(user).Wait();
user.Quests = new Dictionary<string, Tuple<string, string>> { 
       { "hoho Modified", new Tuple<string, string>("B", "B-Item") } };
users.ReplaceOneAsync(p => p.Id == user.Id, user);

Понякога обаче се изисква използването на атомни модификатори, като $push , $pull , $set , $addToSet и т.н. поради опасения за едновременност. Като цяло смятам, че е лоша идея да се извършват сложни операции върху сложни вградени обекти по този начин, защото има голяма вероятност последователността на обекта (в смисъла на ACID или „инварианти на обекта“ ) не може да се провери.

Да предположим, че на потребителя не трябва да бъде позволено да има повече от 3 активни куестове наведнъж, кой гарантира, че това правило се спазва? Това обикновено е отговорност на кода и сложните инварианти не могат да бъдат проверени от базата данни.

Ако все пак искате да използвате тези атомни оператори, предлагам ви да зададете нов въпрос, защото там наистина зависи от детайлите (по подразбиране речникът е сериализиран като документ, кортежът като масив и те изискват различни атомни модификатори в MongoDB). Например, за да добавите нов елемент към речника, използвайте $set :

users.UpdateOneAsync(p => p.Id == user.Id, 
  Builders<User>.Update.Set("Quests.hoho Modified", 
     new Tuple<string, string>("B", "B-Item")));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $type Оператор на заявка

  2. Проверка на парола / потвърждаване на парола със схема Mongoose

  3. Актуализиране на вложен масив вътре в масива mongodb

  4. pymongo:име 'ISODate' не е дефинирано

  5. MongoDB $atan2