MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xóa tài liệu khỏi bộ sưu tập MongoDB dựa trên thời gian của trường Ngày

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 () .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ể.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb - kết hợp regex của các khóa cho các tài liệu phụ

  2. Mongodb tổng hợp sắp xếp và giới hạn trong nhóm

  3. Có thành phần Polymer giúp đơn giản hóa giao tiếp với MongoDB không?

  4. Lỗi Mongoose - không có phương thức 'toObject' sau khi nâng cấp

  5. Mongo db tổng hợp nhiều điều kiện