2015-06-01 2 views
2
{ "_id" : 0, "cityname" : "tallinn", "JAN" : -3 } 

{ "_id" : 1, "cityname" : "beijing", "JAN" : -5 } 

{ "_id" : 2, "cityname" : "berlin", "JAN" : 12 } 

{ "_id" : 3, "cityname" : "buenose", "JAN" : 23 } 

Я хочу, чтобы рассчитать расстояние между Таллином в других городах и Пекином в других городах его продолжать весь документMongoDB - ява получить значение поля

это мой Java-код

try { 
    BasicDBObject query = new BasicDBObject(); 
    BasicDBObject select = new BasicDBObject(); 
    select.put("JAN",1); 
    select.put("_id",1); 
    DBCursor cursor = coll.find(query,select); 
    BasicDBObject obj = (BasicDBObject)cursor.next(); 
    int m,id; 
    id=Integer.parseInt(obj.getString("_id")); 
    for (int j=0;j<4;j++){ 
     m= Integer.parseInt(obj.getString("JAN")); 
      if (id==j){ 
       while (cursor.hasNext()) { 
        int ma; 
        BasicDBObject object = (BasicDBObject)cursor.next(); 
        ma= Integer.parseInt(object.getString("JAN")); 
        System.out.print((m-ma)+" "); 
       } 
     } 
    } 
} 
catch (MongoException e){ 
    System.out.println(e.getClass().getCanonicalName()); 
} 

выход

2 -9 -26 

Я ожидаю, что этот тип вывода

0 2 -15 -26 
-2 0 -17 -28 
15 17 0 -11 
26 28 11 0 

ответ

2

Сначала вы должны выяснить все отчетливое cityname и найти все JAN данной city затем перебрать все данные и вычитаем значение.

Проверить ниже код:

Mongo mongo = new Mongo("localhost", 27017); 
DB db = mongo.getDB("dbName"); 
DBCollection collection = db.getCollection("collectionName"); 
List distinctCity = collection.distinct("cityname"); 
for(int i = 0; i < distinctCity.size(); i++) { 
    BasicDBObject query = new BasicDBObject(); 
    query.put("cityname", distinctCity.get(i)); 
    BasicDBObject project = new BasicDBObject(); 
    project.put("JAN", 1); 
    project.put("_id", 0); 
    DBCursor cursorDoc = collection.find(query, project); 
    while(cursorDoc.hasNext()) { 
    BasicDBObject object = (BasicDBObject) cursorDoc.next(); 
    Integer currentValue = object.getInt("JAN"); 
    DBCursor allData = collection.find(new BasicDBObject(), project); 
    while(allData.hasNext()) { 
     BasicDBObject allDataObject = (BasicDBObject) allData.next(); 
     Integer allDataJanValue = allDataObject.getInt("JAN"); 
     Integer result = currentValue - allDataJanValue; 
     System.out.print(" " + result + " "); 
    } 
    System.out.println(); 
    } 
} 
} 
Смежные вопросы