Это хорошо работают для .set, .unset и условных переключателей.
cf. doc или мой пример ниже:
Код: Выделить всё
AggregationUpdate update = AggregationUpdate.update()
.set("updateTs").toValue(updateTs)
.set("result").toValue(
ConditionalOperators.switchCases(
CaseOperator.when(In.arrayOf("$myArray.state").containsValue("VALA")).then("VALA"),
CaseOperator.when(In.arrayOf("$myArray.state").containsValue("VALB")).then("VALB")
).defaultTo("UNKNOWN")
)
.unset("updateRequested");
UpdateResult result = mongoTemplate.updateMulti(query, update, ResultDocument.class);
в идеале что-то вроде этого:
Код: Выделить всё
// .push("dtArray", newDTValueToPush);// no
// .set("dtArray").toValueOf(Aggregation.group("dtArray").push(newDTValueToPush));// unexpected usage
Код: Выделить всё
.set("myArray").toValue(
ConcatArrays.arrayOf("myArray")
.concat(ConcatArrays.arrayOf(List.of("a","b")))
);
но не работает, если записи массива имеют значение OffsetDateTime,
I' я получил сообщение «Не могу найти кодек для CodecCacheKey{clazz=class java.time.OffsetDateTime, type=null}». (я уже объявил и использую DateToOffsetDateTimeConverter и OffsetDateTimeToDateConverter в конфигурации клиента mongo..)
но как это сделать с помощью AgregationUpdate?
- связанная проблема №4876
Подробнее здесь: https://stackoverflow.com/questions/793 ... o-an-array
Мобильная версия