mongodb查询结果 - 将值存储在jsonObject中

时间:2015-07-06 06:52:05

标签: java json mongodb mongodb-query mongodb-java

我在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 );
                    }

有更好的解决方案吗?

1 个答案:

答案 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++; 
    }
}