Un'espressione regolare non funzionerà su qualcosa che non sia una stringa. In realtà non esiste un modo semplice per selezionare una BSON Date
semplicemente è il valore del tempo in un'espressione di query regolare.
Per fare ciò dovresti fornire un $where
condizione con la logica aggiuntiva da abbinare solo al tempo parte del valore della data.
Sulla base dei dati effettivamente forniti nella domanda:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Che ovviamente è solo il primo documento nei dati forniti, anche se in realtà è identificato solo da "Id"
comunque poiché quel valore è unico tra i due.
Il .getUTCHours()
e .getUTCMinutes()
sono JavaScript Date
metodi oggetto, che è come un BSON Date
è espresso quando utilizzato all'interno di un $where
espressione.
Banalmente, MongoDB 3.6 (in arrivo al momento della scrittura) consente un modulo più efficiente di $where
nelle espressioni di aggregazione:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
Tuttavia tali espressioni non possono essere utilizzate direttamente con metodi come .remove()
o .deleteMany()
, ma $where
le espressioni possono.