Как использовать сокращение 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: []
        }
      }
    }
  }
]

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

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

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

🤔 А знаете ли вы, что...
MongoDB может использоваться для анализа больших данных с помощью интеграции с Apache Spark...


61
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();

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