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.