我对 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
}
}
谢谢。