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

MongoDB Aggregation và Projection ($project, $slice)

Kết hợp $match, $unwind, $sort, $group, $project, $slice

Pipeline aggregation phức tạp: lọc, bẻ mảng, sắp xếp, nhóm lại, cắt lấy N phần tử đầu.

Dữ liệu mẫu

> db.demo762.insertOne({
  _id: { userId: 101, userName: "Chris" },
  countryName: "US",
  details: [
    { Name: "Robert", DueDate: "2020-04-10" },
    { Name: "Robert", DueDate: "2020-04-09" },
    { Name: "Robert", DueDate: "2020-03-06" }
  ]
});

Truy vấn: lấy 2 bản ghi DueDate sớm nhất

db.demo762.aggregate([
  { $match: { _id: { $eq: { userId: 101, userName: "Chris" } } } },
  { $unwind: "$details" },
  { $sort: { "details.DueDate": 1 } },
  {
    $group: {
      _id: "$_id",
      details: { $push: "$details" },
      countryName: { $first: "$countryName" }
    }
  },
  { $project: { details: { $slice: ["$details", 2] }, countryName: 1 } }
]).pretty();

Kết quả

{
  "_id": { "userId": 101, "userName": "Chris" },
  "countryName": "US",
  "details": [
    { "Name": "Robert", "DueDate": "2020-03-06" },
    { "Name": "Robert", "DueDate": "2020-04-09" }
  ]
}

$slice: ["$details", 2] lấy 2 phần tử đầu sau khi sắp xếp tăng dần (DueDate sớm nhất).