java更新多字段Mongo DB
我对mongo db有一个大问题,因为我想用一个请求更新多个字段
我的Json是:
db.test.findOne(); { "_id" : ObjectId("51e7dd16d2f8db27b56ea282"), "ad" : "noc2", "list" : { "p45" : { "id" : "p45", "date" : ISODate("2014-01-01T12:18:30.568Z"), "value3" : 21, "value1" : 100, "value2" : 489 }, "p6" : { "id" : "p6" "date" : ISODate("2013-07-18T12:18:30.568Z"), "value3" : 21, "value1" : 100, "value2" : 489 }, "p4578" : { "id" : "4578" "date" : ISODate("2013-07-18T12:18:30.568Z"), "value3" : 21, "value1" : 100, "value2" : 489 } } }
如果createdDate字段不存在或为空,我希望为所有元素列表创建一个createdDate字段
一个请求示例,我在java代码中使用upsert true更新一个字段:
^{pr2}$我尝试使用java的where list。4578替换为变量,但对于太多字段来说太长。如果我有100个字段,我会执行100个请求
看:
public void createdFirstDateField(MongoAccess mongo, String ad,HashMap<String,Object> hfirstDate){
BasicDBObject searchQuery = new BasicDBObject();
Iterator <String> it = hfirstDate.keySet().iterator();
String key="";
while (it.hasNext()){
key=it.next();
searchQuery.append("ad", ad).append(key, new BasicDBObject("$exists", false));
//System.out.println(key);
BasicDBObject doc = new BasicDBObject ();
doc.append("$set",new BasicDBObject(key,new Date()));
mongo.insert(searchQuery, doc); // update with upsert true
}
}
谢谢
# 1 楼答案
您可以一次更新多个文档,using update Multi。但是没有原子方式来更新多个嵌入文档
您可以签出mongodb位置操作符,但这不适合您的用例
# 2 楼答案
你为什么不使用update with upsert
如果
createdDate
存在,它将被更新,如果不存在,它将被插入