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

Как да включа условно документ в mongo?

Освен възможността да направите всичко атомарно, има два вида съществуващи условия, при които искате да направите промяна, и можете да се справите с всяко от тях атомарно:

  • не съществува запис за ключа
  • съществува запис за ключа и неговия update_time е по-стар от new_time

Актуализирайте съществуващ запис за ключ:

def update_if_stale(key, new_value, new_time):
    collection.update({'key': key,
                       'update_time': {'$lt': new_time}
                       },
                      {'$set': {'value': new_value,
                                'update_time': new_time
                                }
                       }
                      )

Вмъкнете, ако запис за ключ не е съществувал преди:

def insert_if_missing(key, new_value, new_time):
    collection.update({'key': key},
                      {'$setOnInsert': {'value': new_value,
                                        'update_time': new_time
                                        }
                       },
                      upsert=True
                      )

($setOnInsert беше добавен в MongoDB 2.4)

Може да успеете да ги съберете, за да получите това, от което се нуждаете, напр.:

def update_key(key, new_value, new_time):
    insert_if_missing(key, new_value, new_time)        
    update_if_stale(key, new_value, new_time)

Въпреки това, в зависимост от това какви времеви мащаби за премахване/вмъкване може да са възможни във вашата система, може да се нуждаете от множество извиквания (актуализация/вмъкване/актуализация) или други хитрости.

Настрана:Ако искате запис, в който липсва update_time поле, което да се третира като остарял запис за актуализиране, променете {'$lt': new_time}} до {'$not': {'$gte': new_time}}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Препратки срещу вграждания в MongoDB

  2. Не може да се използва BsonIgnoreIfDefault за свойство от тип long

  3. Общ размер на хранилището на MongoDB

  4. Изберете Max() с група по в mongodb

  5. Как да настроите useMongoClient (Mongoose 4.11.0)?