2015-07-06 3 views
1

Я выполнения запроса в MongoDB, который дает следующий результат:MongoDB - сохранения значения в JSONObject

{ 
     "_id" : "180", 
     "total" : 1 
    }, 
    { 
     "_id" : "181", 
     "total" : 1 
    }, 
    { 
     "_id" : "182", 
     "total" : 29 
    } 

Здесь я пропусканием верхний предел _id как 186 и нижним пределом, как 180 .

Таким образом, запрос выполняет поиск _id и передает значение.

Но я хочу сохранить результат следующим образом. Отсутствующий _id следует хранить 0.

{ 
    "_id" : "180", 
    "total" : 1 
}, 
{ 
    "_id" : "181", 
    "total" : 1 
}, 
{ 
    "_id" : "182", 
    "total" : 29 
}, 
{ 
    "_id" : "183", 
    "total" : 0 
}, 
{ 
    "_id" : "184", 
    "total" : 0 
}, 
{ 
    "_id" : "185", 
    "total" : 0 
}, 
{ 
    "_id" : "186", 
    "total" : 0 
} 

Я пытаюсь вставить значения после получения результата в Java в следующим образом.

деньST и деньSTP верхний и нижний предел _id.

output = table.aggregate(pipeline); 
    for (final DBObject res : output.results()) 
     { 
     for (;dayST<daySTP;dayST++) 
      { 
      int _id1 = Integer.parseInt(res.get("_id").toString()); 
       if(dayST == _id1) 
       { 
        data.add(new Gson().fromJson(res.toString(), JsonObject.class)); 


       } 
       else 
       {  
       final JsonObject dataForNoResults = new JsonObject(); 
       dataForNoResults.addProperty("_id", dayST); 
       dataForNoResults.addProperty("totalcount", 0); 
       data.add(dataForNoResults); 

       } 

      } 


     } 

Но это дает следующий результат:

{"_id":"180","totalcount":1}, 
{"_id":181,"totalcount":0}, 
{"_id":182,"totalcount":0}, 
{"_id":183,"totalcount":0}, 
{"_id":184,"totalcount":0}, 
{"_id":185,"totalcount":0}, 
{"_id":186,"totalcount":0} 

Я знаю, логика в моих петель не correct.Can кто-то пожалуйста указать на это?

Edit: я решил его с помощью этого:

ArrayList<Integer> ar = new ArrayList<Integer>(); 
    ArrayList<Integer> br = new ArrayList<Integer>(); 

output = table.aggregate(pipeline); 
    for (final DBObject res : output.results()) 
    { 
     data.add(new Gson().fromJson(res.toString(), JsonObject.class)); 
     ar.add(Integer.parseInt(res.get("_id").toString()));        
     } 
        while(dayST<daySTP) 
       { 
         if(!ar.contains(dayST)){ 
          br.add(dayST);} 
         dayST++; 
       } 
        for(int i = 0;i< br.size();i++) 
        { 
         final JsonObject dataForNoResults = new JsonObject(); 
         dataForNoResults.addProperty("_id", br.get(i)); 
         dataForNoResults.addProperty("totalcount", 0); 
         data.add(dataForNoResults); 
        } 

Есть ли лучшее решение?

ответ

-2

Это проблема с циклом.

while (dayST<daySTP) 
{ 
    for (final DBObject res : output.results()) 
    { 
     if(dayST == _id1) 
     { 
      data.add(new Gson().fromJson(res.toString(), JsonObject.class)); 
     } 
     else 
     {  
      JsonObject dataForNoResults = new JsonObject(); 
      dataForNoResults.addProperty("_id", dayST); 
      dataForNoResults.addProperty("totalcount", 0); 
      data.add(dataForNoResults); 
     } 
     dayST++; 
    } 
} 
+0

Это также не работает. –

+0

{"_id": "180", "totalcount": 1}, {"_ id": "181", "totalcount": 1}, {"_ id": "182", "totalcount": 29}, { "_id": 183, "TotalCount": 0}, { "_ идентификатор": 184, "TotalCount": 0}, { "_ идентификатор": 185, "TotalCount": 0}, { "_ идентификатор": 186, "TotalCount ": 0}, {" _ id ": 187," totalcount ": 0}, {" _ id ": 188," totalcount ": 0}, {" _ id ": 189," totalcount ": 0} –

+0

дает этот результат когда _id задано как 180 и 186 –

Смежные вопросы