Условные операторы возвращают ноль, в противном случае выдается исключение

У меня есть код ниже для сопоставления полей с проекцией.

  private static ProjectionOperation getProjectionOperation() {
      
      Cond conditional =  ConditionalOperators.when(Criteria.where("joined.isHeaderDocument").is(Boolean.TRUE)).thenValueOf("documentID").otherwise(null);
        ProjectionOperation projectOperation = Aggregation.project(
                 .and("doc").as("relationshipNumber") 
                 .and(conditional).as("headerForm");
                 
                
        return projectOperation;

Мне нужно вернуть значение documentID, когда isHeaderDocument равно true, иначе мне не следует сопоставлять поле «headerForm». Я получаю исключение типа "null values not supported for conditional operators". Может кто-нибудь, пожалуйста, помогите

ConditionalOperators. ... .otherwise(null) - возможно, в этом причина.
prasad_ 27.05.2024 09:00
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

в противном случае требуется ненулевой параметр, поэтому вы видите эту ошибку.

Вместо того, чтобы присваивать полю значение null, вам нужно удалить поле, если условие не выполнено, с помощью $$REMOVE. Ваш собственный запрос должен быть

{
    "$cond": {
        "if": {"$eq": ["$joined.isHeaderDocument", true]}, 
        "then": "$documentID", 
        "else": "$$REMOVE"
    }
}

Спрингбут:

Cond conditional = ConditionalOperators.when(
                Criteria.where("joined.isHeaderDocument").is(Boolean.TRUE))
                .thenValueOf("documentID").otherwise(Aggregation.REMOVE);

Другие вопросы по теме