#java #spring-boot
#java #spring-boot
Вопрос:
public Class Customer{
private long id;
private String name;
private String companyName;
private List<Environment> environment = new ArrayList<>();
}
public Class Environment{
private int clusterid;
private string clusterName
}
My Collection in Mongo DB
{
"id":1,
"name":"xyz",
"companyName":"abc",
"environment":[
{
"clusterid":2,
"clusterName":"qwe"
},
{
"clusterid":6,
"clusterName":nme"
}
]
}
want to update environment List of index 1 with returning whole environment List. How do I do this with spring boot? I want to update particular index of list fetching other too in the collection .
public int updateEnv(Customer customer) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(customer.getid()));
Update update = new Update();
update.set("environment", customer.getEnvironment());
return mongoUtil.update(query, update, Customer.class);
}
Этот запрос обновляет весь список среды значением в списке, а не по определенному индексу. Пожалуйста, расскажите о позиционном операторе.Как это сделать с помощью позиционного оператора в Java
Ответ №1:
Вы должны иметь возможность просто передать индекс в update
запрос. Итак, если вы хотите обновить / заменить элемент в индексе 1
, вы можете сделать:
update.set("environment.1", customer.getEnvironment())
Комментарии:
1. это будет установлено, когда вы узнаете индекс. Я хочу обновлять динамически
2. Это не совсем то, что указано в вашем вопросе «… хотите обновить .. индекса 1» :). Итак, как бы вы определили индекс? По
clusterId
?3. предположим, в моей коллекции у меня есть среда, которая в основном является arraylist. теперь я хочу запустить запрос на обновление, так
instead
что из { «id»: 1, «name»: «xyz», «CompanyName»: «abc», «environment»: [ { «clusterid»: 2, «ClusterName»: «qwe» }, { «clusterid»:6, «Имя_кластера»: nme» } ] } ` Я хочу иметь` { «id»: 1, «name»:»xyz», «CompanyName»:»abc», «environment»:[ { «clusterid»:3, «Имя_кластера»: «fgh» },{ «clusterid»:6, «ClusterName»:nme» } ] }
Ответ №2:
Попробуйте этот обновленный запрос.
Обновлена игровая площадка Mongo
db.collection.update({
id: 1/**customer id*/
},
{
"$set": {
"environment.$[element]": {
"clusterId": 4,
/**environment object with updated clusterId*/
"clusterName": "asd"/**environment object with updated clusterName*/
}
}
},
{
arrayFilters: [
{
"element.clusterid": 6/**clusterId of environment you have to update*/
}
]
})
Комментарии:
1. Я привел пример коллекции выше, в которой приведен список среды, я хочу обновить весь, например, вместо { «clusterid»:6, «ClusterName»: nme» } , я хочу обновить {«clusterid»: 4, «ClusterName»:»asd»}.
2. Хорошо, круто. Вот что я понял. Скажите мне, если я ошибаюсь. ИТАК, у нас есть информация о том, какой объект правильно обновлять? Как и в вашем комментарии, мы знаем, что хотим обновить ` { «clusterid»: 6, «ClusterName»: nme» }` с помощью
{"clusterid":4,"clusterName":"asd"}
3. да, я прошел позиционный набор и все, но не смог понять идею написания запроса на Java
4. Обновлен запрос. Можно запустить и проверить, соответствует ли это вашим ожиданиям.
5. Как только мы получим ожидаемый результат. Мы можем работать над преобразованием его в java