我正在 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())
要在 Spring Data MongoDB 聚合中添加
$replaceRoot
阶段,可以使用 Aggregation.replaceRoot
方法。以下是将 MongoDB shell 阶段转换为 Spring Data MongoDB 聚合格式的方法:
Aggregation.replaceRoot
创建 $replaceRoot
舞台。ArrayOperators.ArrayElemAt
获取 joined
数组的第一个元素。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
数组的第一个元素与根文档合并。