我有一個mongo數據庫的大問題,因爲我想用一個請求更新多個字段。更新倍數字段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真:
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
}
}
感謝。
是的,我試過這個,但不好,因爲我想更新所有字段,如果createdDate只爲null,並且您的解決方案所有時間都更新createdDate字段。謝謝 – jonn