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

mongodb:kueri untuk periode waktu antara dua bidang tanggal

Pilihan terbaik adalah menggunakan $redact tahap pipa agregasi:

db.collection.aggregate([
    { "$redact": {
        "$cond": {
            "if": {
                "$gt": [
                    { "$subtract": [ "$lastUpdate", "$createdDate" ] },
                    1000 * 60 * 60 * 24
                ]
            },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

Jadi Anda melihat nilai milidetik dari perbedaan yang lebih besar dari nilai milidetik untuk satu hari. $subtract menghitung selisihnya, dan ketika dua tanggal dikurangi selisihnya dalam milidetik akan dikembalikan.

$redact operator mengambil ekspresi logika sebagai "jika", dan di mana kondisinya true dibutuhkan tindakan dalam "lalu" yaitu ke $$KEEP dokumen. Dimana false kemudian dokumen dihapus dari hasil dengan $$PRUNE .

Perhatikan bahwa karena ini adalah kondisi logis dan bukan nilai yang ditetapkan atau rentang nilai, maka "indeks" tidak digunakan.

Karena operasi dalam pipa agregasi dikodekan secara asli, ini adalah eksekusi tercepat dari pernyataan yang bisa Anda dapatkan.

Alternatifnya adalah evaluasi JavaScript dengan $where . Ini membutuhkan ekspresi fungsi JavaScript yang juga perlu mengembalikan true atau false nilai. Di shell Anda dapat menyingkat seperti ini:

db.collection.find(function() {
    return ( this.lastUpdate.valueOf() - this.createdDate.valueOf() )
       > ( 1000 * 60 * 60 * 24 );
})

Hal yang sama, kecuali bahwa evaluasi JavaScript memerlukan interpretasi dan akan berjalan jauh lebih lambat daripada .aggregate() setara. Dengan cara yang sama, jenis ekspresi ini tidak dapat menggunakan indeks untuk mengoptimalkan kinerja.

Untuk terbaik hasil, menyimpan perbedaan dalam dokumen. Kemudian Anda cukup menanyakan langsung pada properti itu, dan tentu saja Anda juga dapat mengindeksnya.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana mengelola pengguna dan otentikasi di MongoDB

  2. Cascading Kustom di Spring Data MongoDB

  3. mongodb:kueri untuk periode waktu antara dua bidang tanggal

  4. Apa perbedaan antara replaceOne() dan updateOne() di MongoDB?

  5. Tambahkan bidang baru ke setiap dokumen dalam koleksi MongoDB