在 mongodb 中按日期获取最新的完整记录
Get the latest WHOLE record by date in mongodb
我有一个包含对象(事件记录)的集合,如下所示:
{_id: 1, type: "A", val2: "x", val3: "z", date: 1/1}
{_id: 2, type: "A", val2: "y", val3: "y", date: 2/1}
{_id: 3, type: "C", val2: "z", val3: "x", date: 3/1}
{_id: 4, type: "B", val2: "x", val3: "z", date: 4/1}
{_id: 5, type: "C", val2: "y", val3: "y", date: 5/1}
{_id: 6, type: "B", val2: "z", val3: "x", date: 6/1}
我想为每种类型的最新日期获取 完整对象 ,因此在上面的示例中它应该 return 记录 ID:2、5 , 6
我正在做这样的管道查询:
db.items.aggregate(
[
{
$group:
{
_id: "$type",
lastDate: { $last: "$date" }
}
}
]
)
但是 return 我只有这样的文档:
{ _id: 2, lastDate: 2/1}
而我想要 整个对象(带有 val2、val3 等)
我怎样才能做到这一点?
谢谢
您只能对特定项目执行此操作
db.items.aggregate(
[
{
$group:
{
_id: "$type",
lastDate: { $last: "$date" },
val2: { $last: "$val2" },
val3: { $last: "$val3" }
}
}
]
)
请注意,您应该使用 ISODate
作为日期和时间字段的类型。
根据 Markus W Mahlberg 首先回答,您应该将 date
类型更改为 ISODate
或 timestamp
,然后使用聚合。首先排序 date
和分组然后像下面的查询
db.collectionName.aggregate({"$sort":{"date":-1}},
{"$group":{"_id":"$type","lastDate":{"$first":"$date"},
"val2":{"$first":"$val2"},"val3":{"$first":"$val3"}}})
我有一个包含对象(事件记录)的集合,如下所示:
{_id: 1, type: "A", val2: "x", val3: "z", date: 1/1}
{_id: 2, type: "A", val2: "y", val3: "y", date: 2/1}
{_id: 3, type: "C", val2: "z", val3: "x", date: 3/1}
{_id: 4, type: "B", val2: "x", val3: "z", date: 4/1}
{_id: 5, type: "C", val2: "y", val3: "y", date: 5/1}
{_id: 6, type: "B", val2: "z", val3: "x", date: 6/1}
我想为每种类型的最新日期获取 完整对象 ,因此在上面的示例中它应该 return 记录 ID:2、5 , 6
我正在做这样的管道查询:
db.items.aggregate(
[
{
$group:
{
_id: "$type",
lastDate: { $last: "$date" }
}
}
]
)
但是 return 我只有这样的文档:
{ _id: 2, lastDate: 2/1}
而我想要 整个对象(带有 val2、val3 等)
我怎样才能做到这一点?
谢谢
您只能对特定项目执行此操作
db.items.aggregate(
[
{
$group:
{
_id: "$type",
lastDate: { $last: "$date" },
val2: { $last: "$val2" },
val3: { $last: "$val3" }
}
}
]
)
请注意,您应该使用 ISODate
作为日期和时间字段的类型。
根据 Markus W Mahlberg 首先回答,您应该将 date
类型更改为 ISODate
或 timestamp
,然后使用聚合。首先排序 date
和分组然后像下面的查询
db.collectionName.aggregate({"$sort":{"date":-1}},
{"$group":{"_id":"$type","lastDate":{"$first":"$date"},
"val2":{"$first":"$val2"},"val3":{"$first":"$val3"}}})