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

Trích xuất toàn bộ bản ghi dựa trên so sánh với toàn bộ collection MongoDB

Sử dụng $$ROOT để tham chiếu toàn bộ tài liệu gốc

Biến hệ thống $$ROOT tham chiếu đến tài liệu hiện tại trong pipeline. Kết hợp $sort, $group lấy bản ghi mới nhất theo nhóm.

Dữ liệu mẫu

> db.demo743.insertMany([
  { id: 1, ShippingDate: "2020-01-21", value: 50 },
  { id: 2, ShippingDate: "2020-05-10", value: 30 },
  { id: 3, ShippingDate: "2020-05-10", value: 60 },
  { id: 1, ShippingDate: "2020-05-11", value: 75 }
]);

Truy vấn: lấy bản ghi mới nhất (ShippingDate lớn nhất) cho mỗi id

db.demo743.aggregate([
  {
    $project: {
      id: "$id",
      ShippingDate: "$ShippingDate",
      MyDoc: "$$ROOT"
    }
  },
  { $sort: { ShippingDate: -1 } },
  {
    $group: {
      _id: { id: "$id" },
      Result: { $first: "$MyDoc" }
    }
  },
  {
    $project: {
      "Result.ShippingDate": 1,
      "Result.id": 1,
      "Result.value": 1,
      _id: 0
    }
  }
]);

Kết quả

{ "Result": { "id": 3, "ShippingDate": "2020-05-10", "value": 60 } }
{ "Result": { "id": 2, "ShippingDate": "2020-05-10", "value": 30 } }
{ "Result": { "id": 1, "ShippingDate": "2020-05-11", "value": 75 } }

Mỗi id chỉ giữ bản ghi có ShippingDate mới nhất.