Регулярният израз няма да работи върху нещо, което не е низ. Всъщност няма лесен начин за избор на BSON дата
чрез чисто времева стойност в израз на регулярна заявка.
За да направите това, трябва да предоставите $whereкод>
условие с допълнителна логика за съвпадение само на времето част от стойността на датата.
Въз основа на данните, действително предоставени във въпроса:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Което разбира се е само първият документ в предоставените данни, въпреки че всъщност е идентифициран само с „Id“
така или иначе, тъй като тази стойност е уникална между двете.
.getUTCHours()код>
и .getUTCMinutes()код>
са JavaScript Дата
обектни методи, което представлява BSON дата
се изразява, когато се използва в рамките на $where
израз.
Тривиално, MongoDB 3.6 (предстоящ към писането) позволява по-ефективна форма от $where
в изрази за агрегиране:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
Такива изрази обаче не могат да се използват директно с методи като .remove()
или .deleteMany()
, но $where
изразите могат.