我对 mongo db 有一个大问题,因为我想用一个请求更新多个字段。
我的 Json 是:
db.test.findOne(); { “_id”:ObjectId(“51e7dd16d2f8db27b56ea282”), “广告”:“noc2”, “列表” : { “p45”:{ “id”:“p45”, “日期”:ISODate(“2014-01-01T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 }, “p6”:{ “id”:“p6” “日期”:ISODate(“2013-07-18T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 }, “p4578”:{ “身份证”:“4578” “日期”:ISODate(“2013-07-18T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 } } }
如果 createdDate 字段不存在或为空,我想为所有元素 list 创建一个字段 createdDate 。
一个请求示例,我用于在我的代码 java 中使用 upsert 更新一个字段:
db.people.update({"advertiser":"noc2","list.4578.createdDate":{$exists:false}},{$set:{"list.p4578.createdDate":"08/08/08"}});
我尝试使用 java,其中 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
}
}
谢谢。