假设集合中有以下结构的文档:
{
_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
}
])