Project

General

Profile

1
package eu.dnetlib.uoaorcidservice.dao.customDAOsImpl;
2

    
3
import com.mongodb.BasicDBObject;
4
import eu.dnetlib.uoaorcidservice.dao.customDAOs.MongoDBUserTokensDAOCustom;
5
import org.apache.log4j.Logger;
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.data.domain.Sort;
8
import org.springframework.data.mongodb.core.MongoTemplate;
9
import org.springframework.data.mongodb.core.aggregation.Aggregation;
10
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
11
import org.springframework.data.mongodb.core.aggregation.DateOperators;
12

    
13
import java.util.List;
14

    
15
import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
16
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregationOptions;
17

    
18
public class MongoDBUserTokensDAOImpl implements MongoDBUserTokensDAOCustom {
19
    private final Logger log = Logger.getLogger(this.getClass());
20

    
21
    private final MongoTemplate mongoTemplate;
22

    
23
    @Autowired
24
    public MongoDBUserTokensDAOImpl(MongoTemplate mongoTemplate) {
25
        this.mongoTemplate = mongoTemplate;
26
    }
27

    
28

    
29
    //    monthly  new users grant openaire
30
//    db.userTokens.aggregate([{"$group":{  "_id":{    "date":{$dateToString: { format: "%Y-%m", date: "$creationDate" }},    orcid: "$orcid"   },  "count":{"$sum":1}}},{"$group":{  "_id":"$_id.date",  "count":{"$sum":1}}}, {$sort : { _id: 1 }} ])
31
    @Override
32
    public List<Object> newUsersPerMonth() {
33
        Aggregation agg = newAggregation(
34
                project("orcid")
35
                        .and(DateOperators.dateOf("creationDate").month()).as("month")
36
                        .and(DateOperators.dateOf("creationDate").year()).as("year"),
37
                group("month", "year", "orcid")
38
                        .count().as("orcid_works"),
39
                group("month", "year")
40
                        .count().as("works"),
41
                project("works")
42
                        .andInclude("month", "year")
43
        );
44

    
45
        AggregationResults<Object> results = mongoTemplate.aggregate(
46
                agg.withOptions(newAggregationOptions().cursor(new BasicDBObject()).build()),
47
                "userTokens", Object.class);
48
        List<Object> mappedResult = results.getMappedResults();
49
        return mappedResult;
50
    }
51

    
52
    //    yearly  new users grant openaire
53
//    db.userTokens.aggregate([{"$group":{  "_id":{    "date":{$dateToString: { format: "%Y", date: "$creationDate" }},    orcid: "$orcid"   },  "count":{"$sum":1}}},{"$group":{  "_id":"$_id.date",  "count":{"$sum":1}}}, {$sort : { _id: 1 }} ])
54
    @Override
55
    public List<Object> newUsersPerYear() {
56
        Aggregation agg = newAggregation(
57
                project("orcid")
58
                        .and(DateOperators.dateOf("creationDate").year()).as("year"),
59
                group("year", "orcid")
60
                        .count().as("orcid_works"),
61
                group("year")
62
                        .count().as("works"),
63
                project("works")
64
                        .andInclude("year")
65
        );
66

    
67
        AggregationResults<Object> results = mongoTemplate.aggregate(
68
                agg.withOptions(newAggregationOptions().cursor(new BasicDBObject()).build()),
69
                "userTokens", Object.class);
70
        List<Object> mappedResult = results.getMappedResults();
71
        return mappedResult;
72
    }
73

    
74

    
75
    @Override
76
    public List<Object> tokensPerOrcid() {
77
        Aggregation agg = newAggregation(
78
                group("orcid")
79
                        .count().as("tokens"),
80
                project("tokens").andInclude("orcid"),
81
                sort(Sort.Direction.DESC, "tokens")
82
        );
83

    
84
        AggregationResults<Object> results = mongoTemplate.aggregate(
85
                agg.withOptions(newAggregationOptions().cursor(new BasicDBObject()).build()),
86
                "userTokens", Object.class);
87
        List<Object> mappedResult = results.getMappedResults();
88
        return mappedResult;
89
    }
90

    
91
    @Override
92
    public List<Object> totalUniqueUsers() {
93
        Aggregation agg = newAggregation(
94
                group("orcid"),
95
                count().as("users"),
96
                project("users")
97
        );
98

    
99
        AggregationResults<Object> results = mongoTemplate.aggregate(
100
                agg.withOptions(newAggregationOptions().cursor(new BasicDBObject()).build()),
101
                "userTokens", Object.class);
102
        List<Object> mappedResult = results.getMappedResults();
103
        return mappedResult;
104
    }
105
}
(1-1/2)