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

Truy vấn Mongodb tháng cụ thể | năm không phải ngày

Với MongoDB 3.6 và mới hơn, bạn có thể sử dụng $expr toán tử trong find() của bạn truy vấn. Điều này cho phép bạn tạo biểu thức truy vấn so sánh các trường từ cùng một tài liệu trong một $match sân khấu.

db.customer.find({ "$expr": { "$eq": [{ "$month": "$bday" }, 9] } })

Đối với các phiên bản MongoDB khác, hãy cân nhắc chạy đường dẫn tổng hợp sử dụng $redact vì nó cho phép bạn kết hợp với một đường dẫn duy nhất, một chức năng với $project để tạo trường đại diện cho tháng của trường ngày và $match để lọc các tài liệu phù hợp với điều kiện nhất định của tháng là tháng chín.

Trong phần trên, $redact sử dụng $cond toán tử tenary như là phương tiện để cung cấp biểu thức điều kiện sẽ tạo ra biến hệ thống thực hiện thao tác lặp lại. Biểu thức logic trong $cond sẽ kiểm tra sự bình đẳng của trường toán tử ngày với một giá trị nhất định, nếu giá trị đó khớp với thì $redact sẽ trả lại các tài liệu bằng cách sử dụng $$KEEP biến hệ thống và loại bỏ nếu không sử dụng $$PRUNE .

Chạy đường dẫn sau sẽ cho bạn kết quả mong muốn:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$redact": {
            "$cond": [
                { "$eq": [{ "$month": "$bday" }, 9] },
                "$$KEEP",
                "$$PRUNE"
            ]
        }
    }
])

Điều này tương tự với $project + $match nhưng sau đó bạn cần chọn tất cả các trường còn lại đi vào đường dẫn:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$project": {
            "month": { "$month": "$bday" },
            "bday": 1,
            "field1": 1,
            "field2": 1,
            .....
        }
    },
    { "$match": { "month": 9 } }
])

Với một giải pháp thay thế khác, mặc dù truy vấn chậm, sử dụng find() với $where như:

db.customer.find({ "$where": "this.bday.getMonth() === 8" })


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. thêm các trường create_at và updated_at vào lược đồ mongoose

  2. Làm thế nào để chèn một tài liệu có ngày tháng trong mongo?

  3. MongoDB E11000 lỗi khóa trùng lặp

  4. Cập nhật giá trị trong MongoDB dựa trên giá trị hiện tại của nó

  5. Mongodb tránh các mục nhập trùng lặp