Uma Expressão Regular não funcionará em algo que não seja uma string. Na verdade, não há uma maneira simples de selecionar uma
BSON Date
puramente por seu valor de tempo em uma expressão de consulta regular. Para fazer isso, você forneceria um
$where
condição com a lógica adicional para corresponder apenas no tempo parte do valor da data. Com base nos dados realmente fornecidos na pergunta:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Que é, obviamente, apenas o primeiro documento nos dados fornecidos, mesmo que seja apenas identificado por
"Id"
de qualquer forma, uma vez que esse valor é único entre os dois. O
.getUTCHours()
e .getUTCMinutes()
são JavaScript Data
métodos de objeto, que é como um BSON Date
é expresso quando usado em um $where
expressão. Trivialmente, o MongoDB 3.6 (no momento da escrita) permite uma forma mais eficiente do que
$onde
em expressões de agregação:db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
No entanto, essas expressões não podem ser usadas diretamente com métodos como
.remove()
ou .deleteMany()
, mas $where
expressões podem.