Вот мой документ:Как обновить частичный вложенный документ в MongoDB используя Java
{ "_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% "}
Я хочу обновить несколько ключей из метаданных, которые я не знаю заранее. Мой ввод - это карта ключей и значений, которые существуют внутри списка метаданных. Я завершаю карту с другой Картой, что ключом является «Метаданные» и значение данной карты.
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% "}
Что я сделал не так?
гм ... не могу я вытащить объект из БД и поместить вытаскивать значение метаданных, которые это карта, затем поместить значения обновления внутри карты, сложить все и поместить в db? Я просто боюсь иметь много звонков в БД. на самом деле операция обновления будет вызываться с примерно 30 ~ обновленными значениями и почти каждую секунду (это всего лишь небольшая часть приложения). – USer22999299
Вы можете сделать это, но это будет полный раунд для каждого документа. Может быть, все в порядке, и, возможно, это не так, но вам нужно будет учитывать влияние производительности. – evanchooly