这是我的文件:
{ "_id" : ObjectId("5495cfcaec1e18b48015bba3"),
"Type" : "1",
"DomainSize" : "60",
"Metadata" : { "visit" : "3550",
"website" : "1",
"Specifics" : { "Size:" : "2",
"Type:" : "Janes",
"Closure Type:" : "Slip-On"},
"cat" : "2",
"function" : "6"},
"rate" : " 95.5% "}
我想从Metadata中更新几个我事先不知道的密钥。 我的输入是元数据列表中存在的键和值的映射。 我正在用另一个地图包裹给定的地图,其中关键是“元数据”和给定地图的值。
Map<String,Map<String,String>> metadata =new HashMap();
metadata.put("Metadata", values);
所以我最终得到了一个
<"Metadata", Map<Key,Value>>
然后我使用了以下内容:
m_collection.update(new BasicDBObject("_id",id) , new BasicDBObject("$set", new BasicDBObject(metadata)));
记录更新嵌套地图中的现有密钥,将'[]'
添加到每个值,并删除所有未更新的密钥。
例如,给定的地图为{'visit': '3558' , 'website' : '20'}
。
更新后我最终得到:
{ "_id" : ObjectId("5495cfcaec1e18b48015bba3"),
"Type" : "1",
"DomainSize" : "60",
"Metadata" : { "visit" : ["3558"],
"website" : ["20"]},
"rate" : " 95.5% "}
我做错了什么?
答案 0 :(得分:1)
您在&#34;元数据&#34;上调用$ set它会丢弃任何内容,并根据您传入的内容设置新值。如果您只想部分更新这样的文档,则您必须传递完整的文档以反映新状态或仅发出$设置更新:每个要更改的字段一个。
答案 1 :(得分:0)
您需要在用于$set
请参阅https://docs.mongodb.org/manual/tutorial/modify-documents/