【发布时间】:2021-09-22 10:07:06
【问题描述】:
我正在启动 MongoDB,但遇到了有关如何创建查询以按每个不同名称的最后日期过滤文档并检索整个文档的问题。
我的收藏中有一些数据(学生):
{ "_id" : ObjectId("61479d4bc146b1663a8f2b7d"), "city" : "SAO PAULO", "name" : "ANA", "status" : "ACTIVE", "date1" : ISODate("2020-09-01T08:14:30.000Z") }
{ "_id" : ObjectId("61479d88c146b1663a8f2b7e"), "city" : "SAO PAULO", "name" : "MARIA", "status" : "ACTIVE", "date1" : ISODate("2020-08-01T04:16:00.000Z") }
{ "_id" : ObjectId("61479dc2c146b1663a8f2b7f"), "city" : "RIO DE JANEIRO", "name" : "MARIA", "status" : "ACTIVE", "date1" : ISODate("2021-02-01T11:10:00.000Z") }
{ "_id" : ObjectId("61479df1c146b1663a8f2b80"), "city" : "SAO PAULO", "name" : "MARIA", "status" : "INACTIVE", "date1" : ISODate("2021-02-01T11:15:00.000Z") }
{ "_id" : ObjectId("61479e60c146b1663a8f2b81"), "city" : "BRASILIA", "name" : "JOHH", "status" : "ACTIVE", "date1" : ISODate("2021-06-01T01:18:00.000Z") }
我正在创建一个查询来过滤状态“ACTIVE”并仅显示每个学生的最新数据,仅显示“city”、“name”、“date”,我正在尝试使用 $MAX 或 $最后进入组:
db.getCollection('students').aggregate([
{ $match: { status: "ACTIVE" } },
{ $group: { _id: { name : "$name"},
date1 : { $max : "$date1" } ,
city : { $max : "$city" } } }
])
想要的结果:
{ "city" : "SAO PAULO", "name" : "ANA", "date1" : ISODate("2020-09-01T08:14:30.000Z") }
{ "city" : "RIO DE JANEIRO", "name" : "MARIA", "date1" : ISODate("2021-02-01T11:10:00.000Z") }
{ "city" : "BRASILIA", "name" : "JOHH", "date1" : ISODate("2021-06-01T01:18:00.000Z") }
但结果是这样的:
{ "city" : "SAO PAULO", "name" : "ANA", "date1" : ISODate("2020-09-01T08:14:30.000Z") }
{ "city" : "SAO PAULO", "name" : "MARIA", "date1" : ISODate("2021-02-01T11:10:00.000Z") }
{ "city" : "BRASILIA", "name" : "JOHH", "date1" : ISODate("2021-06-01T01:18:00.000Z") }
它正在检索错误的数据。对于 ANA 和 JOHN(每人只有一份文件),没关系。 但是 MARIA 有三个文档,我需要从她的文档中检索 $max 日期的所有数据,并且我正在检索 "city" : "SAO PAULO" 而不是 "city" : "RIO DE JANEIRO" 因为运算符 $ MAX 也适用于该字段。这适用于所有字段,并且 GROUP 运算符不允许删除 MAX 运算符。
我不知道如何修复它。 如何获取整个文档,按“每个不同名称的最后日期”过滤?
【问题讨论】:
标签: mongodb mongodb-query