如何从另一个最大值获得依赖的最大值?



假设集合中有以下结构的文档:

{
_id: ObjectId("63af57637d4f4258c1ba460b"),
metadata: {
billYear: 2022,
billNumber: 1
}
},
{
_id: ObjectId("63af57637d4f4258c1ba460c"),
metadata: {
billYear: 2022,
billNumber: 2
}
},
{
_id: ObjectId("63af57637d4f4258c1ba460d"),
metadata: {
billYear: 2023,
billNumber: 1
}
}

我需要在中获得billYear的最大值今年billNumber的最大值。所以在这个例子中,最大年份是2023,这一年的最大值是1

I try this try:

Data.aggregate( [ { $max : { billNumber : "$billYear" } } ] )

更新

Data.aggregate([{ $group: { _id: null, maxBillYear: { $max: "$metadata.billYear" }}} ])

给出了最大年份值:

[ { _id: null, maxBillYear: 2023 } ]

所以我会考虑用今年运行第二个查询,以获得该数字的最大值。但是有可能在单个查询中直接做到这一点吗?

对于您第一次尝试获取最大年份,您没有正确访问值,如果您尝试这样做,它将工作

Data.aggregate([{ $group: { _id: null, maxBillYear: { $max: "$metadata.billYear" }}} ])

现在你的问题的第二部分要获得单个查询中数字的最大值,你可以像这样尝试

从数据

获取最大账单年份
maxBillYear = Data.aggregate([{ $group: { _id: null, maxBillYear: { $max: "$metadata.billYear" }}} ]).first().maxBillYear

获取一年中账单数量的最大值

Data.aggregate([{ $group: { _id: "$metadata.billYear", maxBillNumber: { $max: "$metadata.billNumber" }}} ])

是你只能得到最大数量的结果在单个查询

db.collection.aggregate([
{
$group: {
_id: "$metadata.billYear",
maxBillNumber: {
$max: "$metadata.billNumber"
}
}
},
{
$sort: {
_id: -1
}
},
{
$limit: 1
}
])

最新更新