数据 : { "_id": { "$oid": "55c9a1be20daedafb345f9d1" }, "guid": "AAA-BBB-CCC", "life": [ { "NBA": "职业生涯", "boy": "少年时期", "kid": "童年时期" } ], "name": "詹姆斯", "sex": "男" }
类:
/**************************
* * 修改4 占位符修改。。。。适用于数据下的子集位置修改
* @param tabName 集合名称 = (表名)
* @param val 原值
* @param data 新值 原值和新值 顺序,个数一致
* @param guid 修改子集的位置(唯一标识)
* @param childKey 修改子集的名称 = key值
* @return
*/
public boolean update(String tabName,Map val,Map data,String guid,String childKey){
//1.把新值装成巨杉格式
BSONObject new_data = new BasicBSONObject();
Iterator iter = data.entrySet().iterator();
int i = 0 ;
while (iter.hasNext()) {
i++;
Map.Entry entry = (Map.Entry) iter.next();
Object value = entry.getValue();
new_data.put(childKey+".$"+i, value);
}
//2.把新值放入$set中作为修改条件
BSONObject matcher = new BasicBSONObject();
matcher.put("$set", new_data);
//3.把原值转化成巨杉格式
BSONObject old_data = new BasicBSONObject();
Iterator it = val.entrySet().iterator();
int k = 0 ;
while(it.hasNext()){
k++;
Map.Entry entry = (Map.Entry) it.next();
Object value = entry.getValue();
old_data.put(childKey+".$"+k, value);
}
old_data.put("guid", guid);
try{
DBCollection cl = cs.getCollection(tabName);
cl.update(old_data, matcher, null);
}catch(Exception e){
e.printStackTrace();
return false;
}finally{
ds.close(sdb);
}
return true;
}
执行:
public static void main(String args[]){
SdbUpdateImpl updateImpl = new SdbUpdateImpl("Test_HanHui");
Map m_old = new HashMap();
m_old .put("kid", "童年时期");
m_old .put("boy", "少年时期");
m_old .put("NBA", "职业生涯");
Map m_new = new HashMap();
m_new.put("kid", "1984年,勒布朗·詹姆斯出生在美国俄亥俄州克里夫兰胡桃树大街的一栋房子里");
m_new.put("boy", "詹姆斯在阿克伦加入了圣文森特·圣玛丽高中,他在打球的头一年就成为了先发球员");
m_new.put("NBA", "2003年NBA选秀大会状元秀被认为没有悬念,非勒布朗·詹姆斯莫属");
updateImpl.update("Collection_HanHui", m_old , m_new, "AAA-BBB-CCC", "life");
// 执行后没有报错。但是 数据不变
}