/**
* 计算某公司每个员工入职以来工作总天数(打卡总数)
* <pre>
* db.runCommand({
* "aggregate": "interactEventHistory",
* "pipeline": [
* {
* "$match": {
* K: V,
* }
* },
* {
* "$project": {
* "companyId": 1,
* "userId": 1
* }
* },
* {
* "$group": {
* "_id": {
* "companyId": "$companyId",
* "userId": "$userId"
* },
* "signInCount": {
* "$sum": 1
* }
* }
* },
* {
* "$project": {
* "_id": 0,
* "companyId": "$_id.companyId",
* "userId": "$_id.userId",
* "signInCount": 1
* }
* }
* ]
* })
* </pre>
*/
Aggregation agg = Aggregation.newAggregation(
match(criteria),
project("companyId", "userId"),
group("companyId", "userId").count().as("signInCount"),
project(Fields.fields("signInCount")
.and("companyId", "_id.companyId")
.and("userId", "_id.userId")
).andExclude("_id"));
AggregationResults<Map> aggResult = (AggregationResults) mongoTemplate
.aggregate(agg, "signInHistory", Object.class);
List<Map> mapResults = aggResult.getMappedResults();
{
"_id": {
"companyId": "54fd0343e4b055a0030461fb",
"userId": "54f23343e4b055a0030461f5"
},
"salary": 3500,
"grantDate": ISODate("2015-08-10T06:34:09.719Z")
}
{
"previous": {
"companyId": "54fd0343e4b055a0030461fb",
"userId": "54f23343e4b055a0030461f5"
},
"salarys": {
"salary": 3500,
"grantDate": ISODate("2015-08-10T06:34:09.719Z")
}
}
/**
* MongoDB部分命令
* {
* "$project": {
* "_id": 0,
* "previous": "$_id",
* "salarys" : {
* "salary" : "$salary",
* "grantDate": "$grantDate"
* }
* }
* }
*/
project("_id", "salary", "grantDate").and("previous").previousOperation()
.and("salarys").nested(Aggregation.bind("salary", "salary")
.and("grantDate", "grantDate")
)