我的代码如下所示。我查询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;
}
答案 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来更新游标,因为它是针对现有查询的。
编辑: 要添加新值,我建议使用两种解决方案。
用于保存更新后的对象
您未在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;
}