Я хочу преобразовать следующий код в код 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: []
}
}
}
}
]
Это не ожидаемый результат.
Я искал в сети, но ничего не нашел.
Что я должен делать?
@ray Вопрос, который вы упомянули, не решен и давно устарел.
$reduce(mongodb.com/docs/v5.0/reference/operator/aggregation/reduce) требуется выражение in
, которое отсутствует в вашем запросе.
@Ноэль, я попросил код весенних данных mongodb.
И я попросил «минимальный, работоспособный пример». Как мне запустить и проверить свой ответ, если код в вопросе неполный?
@Ноэль, ты только что установил logging.level.org.mongodb.driver.protocol: trace
, затем можешь проверить это, и консоль напечатает запрос, отправленный на сервер mongodb. Просто сосредоточьтесь на правильности преобразованного запроса mongodb, поэтому я думаю, что это минимальный пример. Если вы настаиваете, полный код здесь.
«Это не ожидаемый результат». Пожалуйста, отредактируйте свой вопрос, включив в него пример ожидаемого результата. См. минимальный воспроизводимый пример для получения дополнительной информации.
@TylerH 1. Этот вопрос решен. 2. expected result
— первый абзац json-кода.
@SageJustus То, что на вопрос был дан ответ, не имеет отношения к поднятой мной проблеме. Что касается первого абзаца JSON, он выглядит как данные, с которых вы начинаете. Если это желаемый результат, то в вашем вопросе отсутствуют входные данные и по-прежнему отсутствует MCVE.
@TylerH Первый код — это желаемый результат. Второй абзац показывает ошибочный код, а третий абзац показывает выходные данные после запуска кода. Я не совсем понимаю, чего еще не хватает?
В вашем запросе и коде 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
, теперь опубликуйте полный код.
Вы правы, отсутствие in
привело к неправильному преобразованию весенних данных mongodb.
Этот вопрос похож на: Как написать запрос сокращения агрегации mongo в Spring?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.