聚合框架的$max
运算符如何评估复合键。例如:
{
$project: {
user: 1,
record: { date: "$upload_date", comment: 1, some_integer: 1 }
}
},
{
$group: {
_id: "$user",
latest: { $max : "$record" }
}
}
date
它会通过、comment
或获得最大值some_integer
吗?我只是假设它会得到最新的date
。如果错了,找到最大值的正确方法是date
什么?
编辑
从我目前所尝试的来看,最新的记录是由第一个键决定的。这是正确的行为吗?
编辑
为了了解我的用例,我有以下文档:
> db.logs.findOne()
{
'id': ObjectId("50ad8d451d41c8fc58000003")
'name': 'Sample Log 1',
'uploaded_at': ISODate("2013-03-14T01:00:00+01:00"),
'case_id': '50ad8d451d41c8fc58000099',
'result': 'passing'
'tag': ['TAG-XYZ']
}
我有以下聚合:
db.test_case_logs.aggregate(
{$project: {tag:'$tag', case:'$case_id',
latest: {upload_date:1, date:'$upload_date', result:'$result',
passing : { $cond : [ { $eq : ["$result","passing"] }, 1, 0 ] },
failing : { $cond : [ { $eq : ["$result","failing"] }, 1, 0 ] }}
}},
{$unwind: '$tag'},
{$group: {_id:{tag:'$tag',case:'$case'}, latest:{$max:'$latest'}}},
{$group: {_id:'$_id.tag',total:{$sum:1}, passing:{$sum:{$latest.passing}},
failing:{$sum:{$latest.failing}, date:{$max:{$latest.upload_date}}}
},
{'$sort': {'date':-1}}
)
日志可以具有相同的名称tag
,case_id
并且在分组两次之后,我需要结果只是upload_date
每个tag
.
编辑
我的预期结果是这样的:
{
'_id':'TAG-XYZ',
'total':'1'
'passing':'1'
'failing':'0'
}
每个计数对应于给定案例的最新日志。