如何使用mongodb Aggregation.addFields()减少?

问题描述 投票:0回答:1

我想将以下代码转换为spring data mongodb代码。

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

我尝试了以下方法:

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 spring-data-mongodb
1个回答
0
投票

您的查询和 Java 代码都缺少

in
表达式。它应该看起来像这样。

Aggregation.addFields().addField("children")
    .withValueOf(
        ArrayOperators.Reduce.arrayOf("children")
        .withInitialValue(<initialValue>)
        .reduce(<in>)
    ).build();

用适当的初始值和归约表达式替换占位符。

© www.soinside.com 2019 - 2024. All rights reserved.