Spring data AggregationUpdate: как отправить новое значение в массивJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring data AggregationUpdate: как отправить новое значение в массив

Сообщение Anonymous »

Я использую (spring-data-mongodb) AggregationUpdate с ConditionalOperators.switchCases, чтобы обновить несколько документов за один раз.
Это хорошо работают для .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 к существующему обновлению,
в идеале что-то вроде этого:

Код: Выделить всё

// .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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»