我在mongodb中执行查询,结果如下:
{
"_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中获取结果后插入值。
dayST和daySTP是 _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}
我知道循环中的逻辑不正确。任何人都可以指出来吗?
编辑: 我用这个解决了它:
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 );
}
有更好的解决方案吗?
答案 0 :(得分:-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++;
}
}