MongoDB& Java,为结果添加一个值

时间:2012-10-31 09:58:22

标签: java mongodb

我的代码如下所示。我查询MongoDB,结果被序列化并返回。但我想为每个记录/文档添加一个新值,在本例中为'age'。 所以我想我会循环结果并用one.put添加它们但是返回的json中没有显示该值。

我做错了什么?

感谢您提供任何帮助或建议!

    public String (int id){     
        DBCollection collection = database.getCollection("collection");
        BasicDBObject query = new BasicDBObject();
        query.put("id", id);

        DBCursor cursor = collection.find(query);       
        if (cursor.hasNext()) {
            DBObject one = cursor.next();
            one.put("age", 33);
        }

        String json = JSON.serialize(cursor)

        return json;
    }   

3 个答案:

答案 0 :(得分:2)

如果您只是想在结果中注入而不保存数据库中的更改,我建议采用以下实现:

public String getJSONString(int id) {     
    DBCollection collection = database.getCollection("collection");
    DBObject query = new BasicDBObject("id", id);

    List<DBObject> objects = collection.find(query).toArray();       
    for (DBObject obj : objects) {
        obj.put("age", 33);
    }

    return JSON.serialize(objects)
}

请注意,如果以这种方式实施,所有对象必须保留在内存中

顺便说一句:你没有在原始帖子(if而不是while)上环绕光标。此外,光标在finally块中始终应为closed

答案 1 :(得分:0)

我怀疑是否会使用新的put来更新游标,因为它是针对现有查询的。

编辑: 要添加新值,我建议使用两种解决方案。

  1. 将JSON文档映射到POJO,然后调用相应的setter。这是一种更清洁,可扩展的方法。
  2. 将值复制到Map,然后添加最终键:在这种情况下年龄为33的值。
  3. 用于保存更新后的对象

    您未在save上致电collection

    有关详情,请参阅Mongo文档中的Saving objects,尤其是解释更新的最后一部分。

答案 2 :(得分:0)

通过使用ArrayList:

,这就是我最终的工作方式
        public String (int id){     
            DBCollection collection = database.getCollection("collection");
            BasicDBObject query = new BasicDBObject();
            query.put("id", id);

            ArrayList<DBObject> al = new ArrayList<DBObject>();     
            while(cursor.hasNext()){
                DBObject one = cursor.next();        
                one.put("age", 33);
                al.add(one);
            }       

            String json = JSON.serialize(al)

            return json;
        }