Как использовать сокращение mongodb Aggregation.addFields()?

Я хочу преобразовать следующий код в код mongodb весенних данных.

[
  {
    $addFields: {
      children: {
        $reduce: {
          input: "$children",
          initialValue: {
            level: -1,
            presentChild: [],
            prevChild: []
          },
          in: { $concat : ["$$value", "$$this"] }
        }
      }
    }
  }
]

Я попробовал следующее:

val agg = newAggregation(
    Aggregation.addFields()
        .addField("children")
        .withValueOf(
            ArrayOperators.Reduce.arrayOf("children").withInitialValue(
                mapOf(
                    "level" to -1,
                    "presentChild" to emptyList<Any>(),
                    "prevChild" to emptyList<Any>()
                )
            )
        ).build()
)

выход:

[
  {
    $addFields: {
      children: {
        val$initialValue: {
          level: -1,
          presentChild: [],
          prevChild: []
        }
      }
    }
  }
]

Это не ожидаемый результат.

Я искал в сети, но ничего не нашел.

Что я должен делать?

Этот вопрос похож на: Как написать запрос сокращения агрегации mongo в Spring?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

ray 07.07.2024 16:24

@ray Вопрос, который вы упомянули, не решен и давно устарел.

SageJustus 07.07.2024 17:30

$reduce(mongodb.com/docs/v5.0/reference/operator/aggregation‌​/reduce) требуется выражение in, которое отсутствует в вашем запросе.

Noel 08.07.2024 05:38

@Ноэль, я попросил код весенних данных mongodb.

SageJustus 08.07.2024 05:40

И я попросил «минимальный, работоспособный пример». Как мне запустить и проверить свой ответ, если код в вопросе неполный?

Noel 08.07.2024 05:51

@Ноэль, ты только что установил logging.level.org.mongodb.driver.protocol: trace, затем можешь проверить это, и консоль напечатает запрос, отправленный на сервер mongodb. Просто сосредоточьтесь на правильности преобразованного запроса mongodb, поэтому я думаю, что это минимальный пример. Если вы настаиваете, полный код здесь.

SageJustus 08.07.2024 06:04

«Это не ожидаемый результат». Пожалуйста, отредактируйте свой вопрос, включив в него пример ожидаемого результата. См. минимальный воспроизводимый пример для получения дополнительной информации.

TylerH 09.07.2024 17:41

@TylerH 1. Этот вопрос решен. 2. expected result — первый абзац json-кода.

SageJustus 10.07.2024 04:36

@SageJustus То, что на вопрос был дан ответ, не имеет отношения к поднятой мной проблеме. Что касается первого абзаца JSON, он выглядит как данные, с которых вы начинаете. Если это желаемый результат, то в вашем вопросе отсутствуют входные данные и по-прежнему отсутствует MCVE.

TylerH 10.07.2024 21:55

@TylerH Первый код — это желаемый результат. Второй абзац показывает ошибочный код, а третий абзац показывает выходные данные после запуска кода. Я не совсем понимаю, чего еще не хватает?

SageJustus 11.07.2024 04:36
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
10
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В вашем запросе и коде Java отсутствует выражение in. Это должно выглядеть примерно так.

Aggregation.addFields().addField("children")
    .withValueOf(
        ArrayOperators.Reduce.arrayOf("children")
        .withInitialValue(<initialValue>)
        .reduce(StringOperators.Concat.valueOf(ArrayOperators.Reduce.Variable.VALUE.getTarget())
            .concat(ArrayOperators.Reduce.Variable.THIS.getTarget())
        )
    ).build();

Замените заполнители соответствующими начальными значениями и выражениями сокращения.

Я добавил выражение in, теперь опубликуйте полный код.

SageJustus 08.07.2024 06:38

Вы правы, отсутствие in привело к неправильному преобразованию весенних данных mongodb.

SageJustus 08.07.2024 07:13

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