MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara saya memasukkan dokumen secara kondisional di mongo?

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 dari new_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}}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana saya bisa membuat ID unik untuk dokumen yang disematkan di MongoDB?

  2. Bagaimana menghubungkan wadah buruh pelabuhan nodeJS ke mongoDB

  3. Bagaimana cara menghapus database Mongo kosong dengan nama yang sama dengan database yang terisi?

  4. Kapan ke Redis? Kapan ke MongoDB?

  5. Meteor / ReactJS - Masalah berkedip UI:rendering dua kali sebelum dan sesudah memeriksa database