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

Hapus dokumen dari koleksi MongoDB berdasarkan waktu bidang Tanggal

Ekspresi Reguler tidak akan berfungsi pada sesuatu yang bukan string. Sebenarnya tidak ada cara sederhana untuk memilih BSON Date murni nilai waktu dalam ekspresi kueri reguler.

Untuk melakukan ini, Anda akan memberikan $where kondisi dengan logika tambahan untuk dicocokkan hanya pada waktu bagian dari nilai tanggal.

Berdasarkan data yang sebenarnya diberikan dalam pertanyaan:

db.getCollection('collection').remove({
  "Id": "1585534",
  "Type": NumberInt(42),
  "$where": function() {
    return this.InDate.getUTCHours() === 18
      && this.InDate.getUTCMinutes() === 30
  }
})

Yang tentu saja hanya dokumen pertama dalam data yang disediakan, meskipun sebenarnya hanya diidentifikasi oleh "Id" lagi pula karena nilai itu unik di antara keduanya.

.getUTCHours() dan .getUTCMinutes() adalah JavaScript Date metode objek, yang merupakan cara BSON Date diekspresikan saat digunakan dalam $where ekspresi.

Secara sepele, MongoDB 3.6 ( akan datang pada saat penulisan ) memungkinkan bentuk yang lebih efisien daripada $where dalam ekspresi agregasi:

db.getCollection('collection').aggregate([
  { "$match": {
    "Id": "1585534",
    "Type": NumberInt(42),
    "$expr": {
      "$and": [
        { "$eq": [{ "$hour": "$InDate" }, 18 ] },
        { "$eq": [{ "$minute": "$InDate" }, 30] } 
      ] 
    }   
  }}
])

Namun ekspresi tersebut tidak dapat digunakan secara langsung dengan metode seperti .remove() atau .deleteMany() , tetapi $where ekspresi bisa.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. node-mongodb-native:Bagaimana saya bisa membagikan objek db api dari panggilan balik koneksi melalui aplikasi saya

  2. Mengimpor Data Ke Instans MongoDB

  3. Simpan mongoengine bidang referensi

  4. MongoDb:tambahkan elemen ke array jika tidak ada

  5. Cara memeriksa $setDifference dalam dua array menggunakan mongo-query