MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để tôi up một tài liệu có điều kiện trong mongo?

Không thể thực hiện toàn bộ mọi thứ một cách nguyên tử, có hai loại điều kiện hiện tại mà bạn muốn thực hiện thay đổi và bạn có thể giải quyết từng điều kiện đó một cách nguyên tử:

  • không có bản ghi nào cho khóa tồn tại
  • một bản ghi cho khóa tồn tại và update_time của nó cũ hơn new_time

Cập nhật bản ghi hiện có cho khóa:

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
                                }
                       }
                      )

Chèn nếu bản ghi cho khóa không tồn tại trước đây:

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

($setOnInsert đã được thêm vào MongoDB 2.4)

Bạn có thể kết hợp những thứ đó lại với nhau để có được thứ bạn cần, ví dụ:

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

Tuy nhiên, tùy thuộc vào thang thời gian loại bỏ / chèn nào có thể có trong hệ thống của bạn, bạn có thể cần nhiều lệnh gọi (cập nhật / chèn / cập nhật) hoặc các trò tai quái khác.

Ngoài ra:Nếu bạn muốn bản ghi thiếu update_time trường được coi là bản ghi cũ để cập nhật, hãy thay đổi {'$lt': new_time}} tới {'$not': {'$gte': new_time}}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ngoại lệ không có 'MongoConnectionException'

  2. Cập nhật / nâng cấp hàng loạt trong MongoDB?

  3. Giảm hiệu suất nghiêm trọng với Luồng thay đổi MongoDB

  4. Truy cập cơ sở dữ liệu sản xuất sao băng năm 2016

  5. Tối đa và nhóm theo Mongodb