Regulární výraz nebude fungovat na něco, co není řetězec. Ve skutečnosti neexistuje žádný jednoduchý způsob, jak vybrat Datum BSON
čistě je to hodnota času v regulárním výrazu dotazu.
Chcete-li to provést, zadejte $where
podmínku s dodatečnou logikou, která bude odpovídat právě času část hodnoty data.
Na základě údajů skutečně poskytnutých v otázce:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Což je samozřejmě jen první dokument v poskytnutých datech, i když je ve skutečnosti identifikován pouze pomocí "Id"
v každém případě, protože tato hodnota je mezi těmito dvěma jedinečná.
.getUTCHours()
a .getUTCMinutes()
jsou JavaScript Datum
objektové metody, což je způsob Datum BSON
je vyjádřeno při použití v rámci $where
výraz.
Triviálně, MongoDB 3.6 (připravovaný v době psaní) umožňuje efektivnější formu než $where
v agregačních výrazech:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
Takové výrazy však nelze použít přímo s metodami, jako je .remove()
nebo .deleteMany()
, ale $where
výrazy mohou.