Una expresión regular no funcionará en algo que no sea una cadena. En realidad, no existe una forma sencilla de seleccionar una BSON Date
puramente por su valor de tiempo en una expresión de consulta regular.
Para hacer esto, debe proporcionar un $where
condición con la lógica adicional para hacer coincidir solo el tiempo parte del valor de la fecha.
Basado en los datos realmente proporcionados en la pregunta:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Que, por supuesto, es solo el primer documento en los datos proporcionados, aunque en realidad solo se identifica con "Id"
de todos modos, ya que ese valor es único entre los dos.
El .getUTCHours()
y .getUTCMinutes()
son JavaScript Date
métodos de objetos, que es como un BSON Date
se expresa cuando se usa dentro de un $where
expresión.
Trivialmente, MongoDB 3.6 (próximamente al momento de escribir) permite una forma más eficiente que $where
en expresiones de agregación:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
Sin embargo, tales expresiones no se pueden usar directamente con métodos como .remove()
o .deleteMany()
, pero $where
las expresiones pueden.