Selain mampu melakukan semuanya secara atom, ada dua jenis kondisi yang ada di mana Anda ingin membuat perubahan, dan Anda dapat menangani masing-masing secara atom:
- tidak ada catatan untuk kunci tersebut
- ada catatan untuk kunci dan
update_time
its lebih tua darinew_time
Perbarui catatan yang ada untuk kunci:
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
}
}
)
Masukkan jika record untuk kunci tidak ada sebelumnya:
def insert_if_missing(key, new_value, new_time):
collection.update({'key': key},
{'$setOnInsert': {'value': new_value,
'update_time': new_time
}
},
upsert=True
)
($setOnInsert
telah ditambahkan di MongoDB 2.4)
Anda mungkin dapat menggabungkannya untuk mendapatkan apa yang Anda butuhkan, mis.:
def update_key(key, new_value, new_time):
insert_if_missing(key, new_value, new_time)
update_if_stale(key, new_value, new_time)
Namun, tergantung pada skala waktu hapus/masukkan yang mungkin dilakukan di sistem Anda, Anda mungkin memerlukan beberapa panggilan (perbarui/masukkan/perbarui) atau gangguan lainnya.
Selain:Jika Anda ingin catatan kehilangan update_time
bidang untuk diperlakukan sebagai catatan basi untuk diperbarui, ubah {'$lt': new_time}}
ke {'$not': {'$gte': new_time}}