mongo-java 드라이버를 사용하여 Java에서 집계 연산을 수행하려고합니다. 나는 다른 찾기 작업을 수행했지만, 나는 자바에서 올바르게 다음 집계를 할 수없는 해요 :다중 필드가있는 java : group의 Mongo 집계
db.I1.aggregate([
{ "$match": { "ci": 862222} },
{ "$match": { "gi": { "$ne": null } }},
{ "$group": {
"_id": {
"ci": "$ci",
"gi": "$gi",
"gn": "$gn",
"si": "$si"
}
}},
{ "$group": {
"_id": {
"ci": "$_id.ci",
"gi": "$_id.gi",
"gn": "$_id.gn"
},
"sn": { "$sum": 1 }
}},
{ "$sort" : { "_id.gi" : 1}}
])
내가 자바로 그 집계를 수행하는 여러 가지 방법과 방법을 시도했습니다,하지만 난 수 없어요 coll.aggregate(asList())
방법에 그룹 필드 "ci", "gi", "gn","si"
을 올바르게 포함하십시오. 지금까지 내가 가진 것은 다음과 같습니다.
MongoCollection<Document> coll = mongo.getCollection("I1");
Document matchCourse = new Document("$match",
new Document("ci", Integer.parseInt(courseid)));
Document matchGroupNotNull = new Document("$match",
new Document("gi", new Document("$ne", null)));
List<Object> list1 = new BasicDBList();
list1.add(new BasicDBObject("ci", "$ci"));
list1.add(new BasicDBObject("gi", "$gi"));
list1.add(new BasicDBObject("gn", "$gn"));
list1.add(new BasicDBObject("si", "$si"));
Document group1 = new Document(
"_id", list1).append("count", new Document("$sum", 1));
List<Object> list2 = new BasicDBList();
list2.add(new BasicDBObject("ci", "$_id.ci"));
list2.add(new BasicDBObject("gi", "$_id.gi"));
list2.add(new BasicDBObject("gn", "$_id.gn"));
Document group2 = new Document(
"_id", list2).append("sn", new Document("$sum", 1));
Document sort = new Document("$sort",
new Document("_id.gi", 1));
AggregateIterable<Document> iterable = coll.aggregate(asList(matchCourse,
matchGroupNotNull, group1, group2, sort));
나는 그것이 옳지 않다는 것을 알고 있지만, 내가하고있는 것에 대한 아이디어를주기 위해 포함 시켰습니다. 나는 여러 가지 방법으로 이것을 봤는데 몇 페이지를 읽었지만, 나는 해결책을 찾지 못했습니다. MongoDB-Java (1, 2)에 대한 사용 가능한 문서는 나에게 너무 짧으며이 경우는 포함되지 않습니다.
어떻게 Java로 해당 쿼리를 수행 할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.
대단히 감사합니다!