如何在Spring Framework 6聚合中查找后编写replaceRoot和mergeObjects

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

我正在 Spring data mongodb 核心中编写聚合管道。

在查找聚合之后,我想添加一个replaceRoot阶段,但不确定如何以Spring聚合格式编写它。

工作 mongo shell 阶段:

{ $replaceRoot: {'newRoot': {'$mergeObjects': [{'$arrayElemAt': ['$joined',0]},'$$ROOT']}}}

我的第一次尝试,但有些不对劲:

Aggregation.replaceRoot().withValueOf(ArithmeticOperators.arrayElementAt(ArrayOperators.Size.lengthOfArray("joined").arrayOfLength(1),0).and("$$ROOT").mergeObjects())
mongodb spring-data
1个回答
0
投票

要在 Spring Data MongoDB 聚合中添加

$replaceRoot
阶段,可以使用
Aggregation.replaceRoot
方法。以下是将 MongoDB shell 阶段转换为 Spring Data MongoDB 聚合格式的方法:

  1. 使用
    Aggregation.replaceRoot
    创建
    $replaceRoot
    舞台。
  2. 使用
    ArrayOperators.ArrayElemAt
    获取
    joined
    数组的第一个元素。
  3. 使用
    AggregationExpressions.MergeObjects
    joined
    数组的第一个元素与根文档合并。

这是 Spring Data MongoDB 聚合格式的代码:

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
import org.springframework.data.mongodb.core.aggregation.AggregationExpressions;

Aggregation aggregation = Aggregation.newAggregation(
    // other stages...
    Aggregation.replaceRoot().withValue(
        AggregationExpressions.MergeObjects.merge(
            ArrayOperators.ArrayElemAt.arrayOf("joined").elementAt(0),
            Aggregation.ROOT
        )
    )
);

此代码创建一个带有

$replaceRoot
阶段的聚合管道,该阶段将
joined
数组的第一个元素与根文档合并。

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