Tidak ada cara sederhana untuk melakukan ini di MongoDB. Saya menyiapkan satu opsi alternatif yang mungkin cocok untuk Anda. Jika tanggal Anda datang dalam langkah-langkah terpisah, seperti jika ini untuk aplikasi pemesanan di mana pengguna memesan objek berdasarkan hari atau jam, maka Anda dapat menggunakan kombinasi indeks unik dan indeks multikey. Misalnya, misalkan pemesanan dilakukan berdasarkan hari. John Q mencadangkan 11 Oktober hingga 14 Oktober, inklusif. Itu kira-kira seperti hari ke 281 hingga ke 284 dalam setahun - mari kita asumsikan itu adalah hari yang tepat. Simpan bidang reservasi sebagai larik hari yang telah dipesan
> db.reservations.insert({ "span" : [ 281, 282, 283, 284 ] })
Letakkan indeks unik pada span
lapangan.
> db.reservations.ensureIndex({ "span" : 1}, { "unique" : 1 })
Sekarang Anda tidak dapat menyisipkan dokumen yang memiliki hari-hari tersebut dalam rentangnya:
> db.reservations.insert({ "span" : [ 279, 280, 281, 282 ] })
// unique key error
Ini mungkin bekerja untuk Anda dengan beberapa penyesuaian tambahan untuk memperhitungkan tahun, atau mungkin menjadi bagian dari indeks unik gabungan untuk membuat rentang waktu unik dengan mis. room_id
untuk pemesanan hotel.
Cara lain adalah dengan mengoordinasikan pemeriksaan di sisi klien. Jika Anda memiliki banyak klien yang tidak saling berbicara sama sekali, saya kira cara terbaik untuk melakukannya adalah dengan membagikan "kunci" di database:findAndModify
dokumen dalam lock
koleksi untuk memeriksa dan memperoleh kunci. Setelah klien memiliki kunci dengan mengubah bidang pada dokumen itu, klien dapat melakukan pemeriksaan tumpang tindih dengan kueri dan kemudian menyisipkan jika semuanya baik-baik saja, lalu melepaskan kunci dengan mengubah tanda pada dokumen kunci lagi.