집계 프레임 워크의 $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
을 두 번 그룹화 한 후 결과가 최신 로그 만 필요합니다. 각 tag
에 대해 upload_date
각 계수는 주어진 케이스의 최신 로그에 해당
{
'_id':'TAG-XYZ',
'total':'1'
'passing':'1'
'failing':'0'
}
:
편집
내 예상 결과는 무엇인가 같다. $max
documentation 당
어떤 MongoDB 버전을 사용하고 있습니까? – Stennie
MongoDB 2.2를 사용하고 있습니다. – MervS
업데이트 된 집계 작업에서 ** tag ** 필드는 [unwind] (http://docs.mongodb.org/manual/reference/aggregation/unwind/)이지만 값은 태그가 배열이 아니면 오류가 발생합니다. 쿼리 및 예상 결과에 대한 자세한 정보를 제공 할 수 있습니까? (예 : $ sum 연산) –