Biểu thức chính quy sẽ không hoạt động trên một cái gì đó không phải là một chuỗi. Thực ra không có cách nào đơn giản để chọn BSON Date
hoàn toàn là giá trị thời gian trong một biểu thức truy vấn thông thường.
Để làm được điều này, bạn phải cung cấp $ where
điều kiện với logic bổ sung để khớp đúng vào thời gian một phần của giá trị ngày.
Dựa trên dữ liệu thực sự được cung cấp trong câu hỏi:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
Tất nhiên, đó chỉ là tài liệu đầu tiên trong dữ liệu được cung cấp, mặc dù nó thực sự chỉ được xác định bằng "Id"
dù sao vì giá trị đó là duy nhất giữa hai.
.getUTCHours ()
và .getUTCMinutes ()
là JavaScript Ngày
các phương thức đối tượng, đó là cách một BSON Date
được thể hiện khi được sử dụng trong $ where
biểu thức.
Thông thường, MongoDB 3.6 (sắp ra mắt) cho phép một biểu mẫu hiệu quả hơn $ where
trong biểu thức tổng hợp:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
Tuy nhiên, các biểu thức như vậy không thể được sử dụng trực tiếp với các phương thức như .remove ()
hoặc .deleteMany ()
, nhưng $ where
biểu thức có thể.