i have big problem mongo db because want update multiple fields 1 request.
my 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 } } } i want created field createddate elements list , if createddate field doesn't exist or null.
a request example, use update 1 field upsert true in code java :
db.people.update({"advertiser":"noc2","list.4578.createddate":{$exists:false}},{$set:{"list.p4578.createddate":"08/08/08"}}); i tried java list.4578 replaced variable long fields. if have 100 fields, execute 100 requests.
look :
public void createdfirstdatefield(mongoaccess mongo, string ad,hashmap<string,object> hfirstdate){ basicdbobject searchquery = new basicdbobject(); iterator <string> = 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 upsert true } } thanks.
why don't use update upsert?
db.people.update({"advertiser": "noc2"}, {$set: {"list.$.createddate": "08/08/08"}}, {$upsert: true); if createddate exists updated, if not inserted.
Comments
Post a Comment