salerokada
salerokada

Reputation: 383

Spring: Update MongoDB with existing field

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

Answers (1)

Charchit Kapoor
Charchit Kapoor

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

Related Questions