MongoDB $last 运算符介绍

$last 是 MongoDB 聚合管道中的一个运算符,用于获取一个数组中最后一个元素的值。该运算符可以用于多种场景,例如获取每个作者最新发表的文章、获取每个用户最近的登录时间等。

语法

$last 运算符的语法如下:

{ $last: <expression> }

其中,<expression> 表示要获取最后一个元素值的表达式,可以是任意合法的表达式。

使用场景

$last 运算符常用于以下场景:

  • 获取一个数组中最后一个元素的值;
  • 获取按照某个字段排序后的最后一个文档的某个字段的值。

实例

获取每个作者最新发表的文章

假设我们有一个存储作者及其文章的集合 authors,其中每个文档都包含 namearticles 字段。每个 articles 字段是一个数组,包含该作者发表的所有文章的标题和发表时间。我们可以使用 $last 运算符来获取每个作者最新发表的文章。

db.authors.aggregate([
  {
    $project: {
      name: 1,
      latest_article: { $last: "$articles.title" },
      latest_article_date: { $last: "$articles.published_date" }
    }
  }
])

上面的聚合操作将返回一个文档数组,其中每个文档都包含作者的名称以及他们最新发表的文章的标题和发表日期。

获取每个用户最近的登录时间

假设我们有一个存储用户登录信息的集合 user_login,其中每个文档都包含用户 ID 和登录时间等信息。我们可以使用 $last 运算符来获取每个用户最近的登录时间。

db.user_login.aggregate([
  {
    $group: {
      _id: "$user_id",
      last_login_time: { $last: "$login_time" }
    }
  }
])

上面的聚合操作将返回一个文档数组,其中每个文档都包含用户 ID 和他们最近的登录时间。

获取每个班级最新的考试成绩

假设我们有一个存储班级考试成绩的集合 class_scores,其中每个文档都包含班级名称、学生姓名和考试成绩等信息。我们可以使用 $last 运算符来获取每个班级最新的考试成绩。

db.class_scores.aggregate([
  {
    $sort: { exam_date: -1 }
  },
  {
    $group: {
      _id: "$class_name",
      student_scores: { $push: { name: "$student_name", score: "$score" } },
      latest_exam_date: { $last: "$exam_date" }
    }
  }
])

上面的聚合操作将返回一个文档数组,其中每个文档都包含班级名称、每个学生的考试成绩和班级最新的考试日期。

结论

MongoDB $last 聚合管道运算符,用于获取一个数组中最后一个元素的值。该运算符可以用于多种场景,例如获取每个作者最新发表的文章、获取每个用户最近的登录时间等。