聚合框架的$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'
}
每個計數對應於最新的日誌給定的情況。
你使用的是什麼版本的MongoDB? – Stennie
我正在使用MongoDB 2.2 – MervS
在更新的聚合操作中,您[展開](** tag **)字段的**標記**字段,但值標記不是一個數組,這會產生一個錯誤。你能否提供關於查詢和預期結果的更多信息? (例如$ sum操作) –