在这种情况下,我遇到的问题是对每个注册日的所有值的列表进行区分。示例:
{汽车:“沃尔沃”,公里:“101”,dateInsert::ISODate("2019-10-22T14:43:32.924+01:00")}
{汽车:“沃尔沃”,公里:“105”,dateInsert::ISODate("2019-10-22T14:50:32.924+01:00")},
{汽车:“沃尔沃”,公里:“115”,dateInsert::ISODate(“2019-10-23T19:43:32.924+01:00”)
{汽车:“沃尔沃”,公里:“119”,dateInsert::ISODate("2019-10-23T20:30:32.924+01:00")},
{汽车:“宝马”,公里:“40”,dateInsert::ISODate(“2019-10-10T14:43:32.924+01:00”)
{汽车:“宝马”,公里:“43”,dateInsert::ISODate(“2019-10-10T14:50:32.924+01:00”)
{汽车:“宝马”,公里:“50”,dateInsert::ISODate("2019-10-10T19:43:32.924+01:00")},
{汽车:“宝马”,公里:“59”,dateInsert::ISODate("2019-10-11T20:30:32.924+01:00")}, .
在这种情况下,只有粗体显示,我需要的最后记录的每一天。
获得这些唱片的好方法是什么?
发布于 2021-08-30 12:10:10
MongoDB也可以比较文档,通过逐个比较字段,如果它们有相同的名称,那么在km第一个字段中,我们将首先得到max km。$$ROOT是一个系统变量,具有所有文档的值。
db.collection.aggregate([
{
"$group": {
"_id": {
"year": {
"$year": "$dateInsert"
},
"day": {
"$dayOfYear": "$dateInsert"
}
},
"max": {
"$max": {
"km": "$km",
"doc": "$$ROOT"
}
}
}
},
{
"$replaceRoot": {
"newRoot": "$max.doc"
}
}
])发布于 2021-08-30 10:45:51
$substr和$dateToString只从ISODate中提取日期。$group和$addToSet按唯一日期对所有文档进行分组。$reduce查找每个日期的km字段最大值的文档。$projectdb.collection.aggregate([
{
"$set": {
"dateInsert": {
$substr: [
{
$dateToString: {
date: "$dateInsert"
}
},
0,
10
]
}
}
},
{
"$group": {
"_id": "$dateInsert",
"results": {
$addToSet: {
car: "$car",
km: "$km"
}
}
}
},
{
"$set": {
"results": {
$reduce: {
input: "$results",
initialValue: {
km: 0
},
in: {
$cond: [
{
$gte: [
"$$this.km",
"$$value.km"
]
},
"$$this",
"$$value"
]
}
}
}
}
},
{
"$project": {
dateInsert: "$_id",
car: "$results.car",
km: "$results.km",
_id: 0
}
}
])下面是工作示例:F
https://stackoverflow.com/questions/68982357
复制相似问题