2015-06-04 1 views
0
db.student.aggregate([{$project:{rollno:1,per:{$divide:[{$add:["marks1","$marks2","$marks3"]},3]}}}]) 

Как написать этот запрос в java ????? здесь, ученик - это коллекция с полями rollno, имя и знаки, и я должен найти процент учащихся по их номерам рулонов. Я не могу написать код для добавления своих меток, поскольку оператор добавления не поддерживает несколько значений для добавления.Как добавить два поля в mongoDB с помощью драйвера java

+0

Что вы пробовали? Вы получите лучший ответ, если вы отправите код, который вы пробовали, который не работает, спрашивая, где исправить, а не просто попросить, чтобы решение было передано вам – WebChemist

ответ

0

Это похоже на работу. Существуют другие шаблоны/удобства для строителей, но это обеспечивает все работы. И оставляет место для богатого динамичного строительства.

 DBCollection coll = db.getCollection("student"); 

     List<DBObject> pipe = new ArrayList<DBObject>(); 

     /**                   
     * Clearly, lots of room for dynamic behavior here.       
     * Different sets of marks, etc. And the divisor is       
     * the length of these, etc.             
     */ 
     String[] marks = new String[]{"$marks1","$marks2","$marks3"}; 
     DBObject add = new BasicDBObject("$add", marks); 
     List l2 = new ArrayList(); 
     l2.add(add); 
     l2.add(marks.length); // 3             
     DBObject divide = new BasicDBObject("$divide", l2); 

     DBObject prjflds = new BasicDBObject(); 
     prjflds.put("rollno", 1); 
     prjflds.put("per", divide); 

     DBObject project = new BasicDBObject(); 
     project.put("$project", prjflds); 
     pipe.add(project); 

     AggregationOutput agg = coll.aggregate(pipe); 

     for (DBObject result : agg.results()) { 
      System.out.println(result); 
     }