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

MongoDB menemukan rentang tanggal jika tumpang tindih dengan tanggal lain

Tumpang tindih waktu dapat diilustrasikan dengan 4 kasus ini pada gambar di bawah ini, di mana S/E adalah tanggal mulai/tanggal akhir dari dokumen baru dan S'/E' adalah tanggal mulai/tanggal akhir dari dokumen yang ada:

  S'                  E' 
  |-------------------|

   S                E 
   |****************|

S'          E' 
|-----------|

      S'          E' 
      |-----------|

              S'          E' 
              |-----------|

Dalam 4 kasus kami memiliki S'<E dan E'>S . Permintaan untuk menemukan semua dokumen dengan waktu yang tumpang tindih dapat berupa:

db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})

EDIT:

Tanggal mulai dan tanggal akhir Anda dalam format string, dan tidak diurutkan secara leksikal, sehingga tidak dapat menggunakan "$gt" dan "$lt" untuk perbandingan. Anda harus mengonversinya ke Jenis tanggal:

db.collection.find().forEach(
  function (e) {
    // convert date if it is a string
    if (typeof e.startdate === 'string') {
       e.startdate = new Date(e.startdate);
    }
    if (typeof e.enddate === 'string') {
       e.enddate = new Date(e.enddate);
    } 
    // save the updated document
    db.collection.save(e);
  }
)

Permintaan terakhir adalah:

db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana Anda menyemai hubungan untuk Mongoid di Ruby on Rails?

  2. MongoDB $konversi

  3. Cara menulis kueri pencarian mongo berikut di Yii2

  4. Meteor:Kode keluar mongo tak terduga 100. Mulai ulang. Tidak dapat memulai server mongo

  5. Mendapatkan hari pertama dalam seminggu dari nomor minggu di mongodb