Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lọc truy vấn theo định dạng ngày cụ thể trong MongoDB

Lọc tài liệu theo định dạng ngày với $dateToString

Để lọc tài liệu dựa trên định dạng ngày cụ thể (ví dụ: YYYY-MM-DD), sử dụng $dateToString trong aggregation pipeline.

1. Tạo collection với dữ liệu ngày

> db.demo433.insertOne({ "DueDate": new Date("2019-11-23") });
{ "acknowledged": true, "insertedId": ObjectId("5e771278bbc41e36cc3cae91") }

> db.demo433.insertOne({ "DueDate": new Date("2020-01-03") });
{ "acknowledged": true, "insertedId": ObjectId("5e771290bbc41e36cc3cae92") }

2. Xem dữ liệu gốc (ISODate)

> db.demo433.find();

Kết quả:

{ "_id": ObjectId("5e771278bbc41e36cc3cae91"), "DueDate": ISODate("2019-11-23T00:00:00Z") }
{ "_id": ObjectId("5e771290bbc41e36cc3cae92"), "DueDate": ISODate("2020-01-03T00:00:00Z") }

3. Truy vấn lọc theo ngày 2020-01-03

> db.demo433.aggregate([
    {
        $addFields: {
            stringDate: {
                $dateToString: { format: "%Y-%m-%d", date: "$DueDate" }
            }
        }
    },
    { $match: { "stringDate": "2020-01-03" } },
    { $project: { "stringDate": 0 } }
])

4. Kết quả

{ "_id": ObjectId("5e771290bbc41e36cc3cae92"), "DueDate": ISODate("2020-01-03T00:00:00Z") }

Các định dạng ngày thường dùng

FormatKết quả ví dụ
%Y-%m-%d2020-01-03
%d/%m/%Y03/01/2020
%H:%M:%S14:30:00
%Y-%m-%d %H:%M2020-01-03 14:30

Lưu ý: Cách này chuyển đổi ngày thành chuỗi để so sánh. Với dữ liệu lớn, hãy cân nhắc tạo index trên trường ngày gốc và dùng toán tử so sánh ngày trực tiếp ($gte, $lte) để hiệu suất tốt hơn.