У меня есть приложение, в котором я использую структуру Spring и использую mongoDB в качестве базы данных. У меня есть коллекция, которая индексируется по электронной почте. Поля:
{
email: <email>
profile: {
name: <name>
age: <age>
customMap: {
}
}
}
Это документ:
@Document(collection = "user")
class User {
String email;
Profile profile;
}
class Profile {
String name;
int age;
Map customMap;
}
Вариант использования заключается в том, что поле электронной почты уникально. Поэтому, когда приходит запрос с существующим электронным письмом, мне нужно обновить документ с новым профилем. Я могу вставить новый документ с вызовом mongoOperations.save
. Но при обновлении, если я передаю customProfile с новой картой, я получаю
java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
Как ошибка. Но если я попытаюсь обновить только поле age
, оно будет успешно обновлено. У меня проблема только с использованием карты, и я использую HashMap
.
Это код для обновления:
Update update = new Update();
Profile profile = new Profile();
profile.setAge(10);
Map customMap = new HashMap();
customMap.put("name", "value");
profile.setCustomMap(customMap);
update.set("profile", profile);
mongoOperations.updateFirst(query, update, User.class);
Если я закомментирую profile.setCustomMap(customMap);
, он успешно обновится. Я что-то пропустил здесь?