Reputation: 383
In Spring Boot I want to update a field in collection using other field from that collection.
I tried this, but it doesn't work.
public void setTypeOfPayment(MongoTemplate mongoTemplate) {
Query query = new Query();
Criteria paymentTypeFilter1 = Criteria.where("payment_type").is("SOME1");
Criteria paymentTypeFilter2 = Criteria.where("payment_type").is("SOME2");
query.addCriteria(paymentTypeFilter1.orOperator(paymentTypeFilter2));
Update update = new Update();
update.set("payment.type_of_payment", "$payment_type");
mongoTemplate.updateMulti(query, update, Report.class);
}
I want to put existing payment_type
value into payment.type_of_payment
but I only get string $payment_type
.
Is there a way to achieve this?
Update: my MongoDb version is 4.0.6.
Upvotes: 0
Views: 1514
Reputation: 9294
If you have the recent versions of spring data MongoDB, you can try using AggregationUpdate
like this:
public void setTypeOfPayment(MongoTemplate mongoTemplate) {
Query query = new Query();
Criteria paymentTypeFilter1 = Criteria.where("payment_type").is("SOME1");
Criteria paymentTypeFilter2 = Criteria.where("payment_type").is("SOME2");
query.addCriteria(paymentTypeFilter1.orOperator(paymentTypeFilter2));
AggregationUpdate update = AggregationUpdate.update().set("payment.type_of_payment")
.toValueOf("payment_type")
mongoTemplate.updateMulti(query, update, Report.class);
}
Upvotes: 2