com.anwen.mongo.aggregate.Aggregate Maven / Gradle / Ivy
package com.anwen.mongo.aggregate;
import com.anwen.mongo.aggregate.pipeline.Project;
import com.anwen.mongo.aggregate.pipeline.UnwindOption;
import com.anwen.mongo.conditions.query.QueryChainWrapper;
import com.anwen.mongo.model.aggregate.Field;
import com.anwen.mongo.support.SFunction;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoNamespace;
import com.mongodb.client.model.*;
import com.mongodb.client.model.densify.DensifyOptions;
import com.mongodb.client.model.densify.DensifyRange;
import com.mongodb.client.model.fill.FillOptions;
import com.mongodb.client.model.fill.FillOutputField;
import com.mongodb.lang.Nullable;
import org.bson.conversions.Bson;
import java.util.Collection;
import java.util.List;
public interface Aggregate extends Project {
/**
* 获取管道列表
* @return {@link List}
* @author anwen
* @date 2024/6/11 下午8:18
*/
List getAggregateConditionList();
/**
* 获取聚合管道选项
* @return {@link com.mongodb.BasicDBObject}
* @author anwen
* @date 2024/6/19 下午11:45
*/
BasicDBObject getAggregateOptions();
/* $addFields阶段 start */
/**
* 向嵌入文档或文档中加入一个新字段
* $addFields: {"specs": "unleaded"}
* $addFields: {"specs.fuel_type": "unleaded"}
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
Children addFields(final String field,final String value);
/**
* 向嵌套文档或文档中加入一个新字段
* $addFields: {"specs": "unleaded"}
* $addFields: {"specs.fuel_type": "unleaded"}
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
Children addFields(final SFunction field,final String value);
/**
* 向嵌套文档或文档中加入一个新字段
* $addFields: {"specs": "unleaded"}
* $addFields: {"specs.fuel_type": "unleaded"}
* @param value 值
* @param field 字段,嵌套文档请按照顺序传入,中间会自动拼接.
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
@SuppressWarnings("unchecked")
Children addFields(final String value,final SFunction... field);
/**
* $addFields阶段,指定现有字段,覆盖原字段
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:31
*/
Children addFields(final SFunction field,final Object value);
/**
* $addFields阶段,向数组中添加元素
* @param field 数组字段
* @param value 需要向数组中添加的值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:44
*/
Children addFields(final SFunction field, final Collection> value);
/**
* $addFields阶段,向数组中添加元素
* @param field 数组
* @param value 需要向数组中添加的值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:44
*/
Children addFields(final String field, final Collection> value);
/**
* $addFields阶段
* @param fields 多个Field
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:26
*/
Children addFields(final Field>... fields);
/**
* $addFields阶段
* @param fields 多个Field
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:26
*/
Children addFields(final List> fields);
/**
* $addFields阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson,或使用${@link Field}
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:47
*/
Children addFields(final Bson bson);
/* $addFields阶段 end */
/* =============================================================================== */
/* $set阶段 start */
/**
* 向嵌入文档或文档中加入一个新字段
* $set: {"specs": "unleaded"}
* $set: {"specs.fuel_type": "unleaded"}
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
Children set(final String field,final String value);
/**
* 向嵌套文档或文档中加入一个新字段
* $set: {"specs": "unleaded"}
* $set: {"specs.fuel_type": "unleaded"}
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
Children set(final SFunction field,final String value);
/**
* 向嵌套文档或文档中加入一个新字段
* $set: {"specs": "unleaded"}
* $set: {"specs.fuel_type": "unleaded"}
* @param value 值
* @param field 字段,嵌套文档请按照顺序传入,中间会自动拼接.
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:37
*/
@SuppressWarnings("unchecked")
Children set(final String value,final SFunction... field);
/**
* $set阶段,指定现有字段,覆盖原字段
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:31
*/
Children set(final SFunction field,final Object value);
/**
* $set阶段,向数组中添加元素
* @param field 数组字段
* @param value 需要向数组中添加的值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:44
*/
Children set(final SFunction field, final Collection> value);
/**
* $set阶段,向数组中添加元素
* @param field 数组
* @param value 需要向数组中添加的值
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:44
*/
Children set(final String field, final Collection> value);
/**
* $set阶段
* @param fields 多个Field
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:26
*/
Children set(final Field>... fields);
/**
* $set阶段
* @param fields 多个Field
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:26
*/
Children set(final List> fields);
/**
* $set阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson,或使用${@link Field}
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:47
*/
Children set(final Bson bson);
/* $set阶段 end */
/* =============================================================================== */
/* $bucket阶段 start */
/**
* $bucket阶段
* @param groupBy 分组字段
* @param boundaries 桶边界
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:07
*/
Children bucket(final SFunction groupBy,final List boundaries);
/**
* $bucket阶段
* @param groupBy 分组字段
* @param boundaries 桶边界
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:07
*/
Children bucket(final Object groupBy,final List boundaries);
/**
* $bucket阶段
* @param groupBy 分组字段
* @param boundaries 桶边界
* @param options 可选值,其中包含default和output
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:08
*/
Children bucket(final SFunction groupBy, final List boundaries, BucketOptions options);
/**
* $bucket阶段
* @param groupBy 分组字段
* @param boundaries 桶边界
* @param options 可选值,其中包含default和output
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:08
*/
Children bucket(final Object groupBy, final List boundaries, BucketOptions options);
/**
* $bucket阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:47
*/
Children bucket(final Bson bson);
/* $bucket阶段 end */
/* =============================================================================== */
/* $bucketAuto阶段 start */
/**
* $bucketAuto阶段
* @param groupBy 分组字段
* @param buckets 桶的数量
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:15
*/
Children bucketAuto(final SFunction groupBy,final Integer buckets);
/**
* $bucketAuto阶段
* @param groupBy 分组字段
* @param buckets 桶的数量
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:15
*/
Children bucketAuto(final Object groupBy,final Integer buckets);
/**
* $bucketAuto阶段
* @param groupBy 分组字段
* @param buckets 桶的数量
* @param options 可选值,其中包含output和granularity
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:18
*/
Children bucketAuto(final SFunction groupBy, final Integer buckets, BucketAutoOptions options);
/**
* $bucketAuto阶段
* @param groupBy 分组字段
* @param buckets 桶的数量
* @param options 可选值,其中包含output和granularity
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:18
*/
Children bucketAuto(final Object groupBy, final Integer buckets, BucketAutoOptions options);
/**
* $bucketAuto阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午3:47
*/
Children bucketAuto(final Bson bson);
/* $bucketAuto阶段 end */
/* =============================================================================== */
/* $count阶段 start */
/**
* $count阶段
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:45
*/
Children count();
/**
* $count阶段
* @param field 输出字段名
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:45
*/
Children count(final String field);
/**
* $count阶段
* @param field 输出字段
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:45
*/
Children count(final SFunction field);
/* $count阶段 end */
/* =============================================================================== */
/* $match阶段 start */
/**
* $match阶段
* @param queryChainWrapper 条件
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午2:22
*/
Children match(final QueryChainWrapper, ?> queryChainWrapper);
/**
* $match阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @author anwen
* @date 2024/6/10 下午3:54
*/
Children match(final Bson bson);
/* $match阶段 end */
/* =============================================================================== */
/* $project阶段 start */
/**
* $project阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* 如:使用{@link com.anwen.mongo.aggregate.pipeline.Projections}进行构建,基于MongoDB驱动提供,进行封装,支持lambda形式
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午2:20
*/
Children project(final Bson bson);
/* $project阶段 end */
/* =============================================================================== */
/* $sort阶段 start */
/**
* $sort阶段
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:33
*/
Children sort(final String field, final Integer value);
/**
* $sort阶段
* @param field 字段
* @param value 值
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:33
*/
Children sort(final SFunction field,final Integer value);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAsc(final SFunction field);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAsc(final String field);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAsc(final SFunction... field);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAsc(final String... field);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAscLambda(final List> field);
/**
* $sort阶段,按照指定字段升序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortAsc(final List field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDesc(final SFunction field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDesc(final String field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDesc(final SFunction... field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDesc(final String... field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDescLambda(final List> field);
/**
* $sort阶段,按照指定字段降序排序
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:35
*/
Children sortDesc(final List field);
/**
* 为给定字段上的文本分数元投影创建排序规范
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:31
*/
Children metaTextScore(final String field);
/**
* 为给定字段上的文本分数元投影创建排序规范
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:31
*/
Children metaTextScore(final SFunction field);
/**
* $sort阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午5:32
*/
Children sort(final Bson bson);
/* $sort阶段 end */
/* =============================================================================== */
/* $sortByCount阶段 start */
/**
* $sortByCount阶段
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:36
*/
Children sortByCount(final String field);
/**
* $sortByCount阶段
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:36
*/
Children sortByCount(final SFunction field);
/* $sortByCount阶段 end */
/* =============================================================================== */
/* $skip阶段 start */
/**
* $skip阶段,当前页
* @param skip 当前页
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:39
*/
Children skip(final long skip);
/**
* $skip阶段,当前页
* @param skip 当前页
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:39
*/
Children skip(final int skip);
/* $skip阶段 end */
/* =============================================================================== */
/* $limit阶段 start */
/**
* $limit阶段 每页显示行数
* @param limit 每页显示行数
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:40
*/
Children limit(final long limit);
/**
* $limit阶段 每页显示行数
* @param limit 每页显示行数
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:40
*/
Children limit(final int limit);
/* $limit阶段 end */
/* =============================================================================== */
/* $lookup阶段 start */
/**
* $lookup阶段
* @param from 目标集合名称
* @param localField 当前集合用于关联的字段
* @param foreignField 指定目标集合用于关联的字段
* @param as 输出结果中保存关联值的字段名
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午7:05
*/
Children lookup(final String from,final String localField,final String foreignField,final String as);
/**
* $lookup阶段
* @param from 目标集合名称
* @param localField 当前集合用于关联的字段
* @param foreignField 指定目标集合用于关联的字段
* @param as 输出结果中保存关联值的字段名
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午7:05
*/
Children lookup(final String from,final SFunction localField,final SFunction foreignField, final String as);
/**
* $lookup阶段
* @param from 目标集合名称
* @param localField 当前集合用于关联的字段
* @param foreignField 指定目标集合用于关联的字段
* @param as 输出结果中保存关联值的字段名
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午7:05
*/
Children lookup(final String from,final SFunction localField,final String foreignField,final String as);
/**
* $lookup阶段
* @param from 目标集合名称
* @param localField 当前集合用于关联的字段
* @param foreignField 指定目标集合用于关联的字段
* @param as 输出结果中保存关联值的字段名
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午7:05
*/
Children lookup(final String from,final String localField,final SFunction foreignField,final String as);
/**
* $lookup阶段
* @param from 目标集合名称
* @param letList 在管道字段阶段使用的变量
* @param aggregate 在连接集合上运行的管道
* @param as 输出结果中保存关联值的字段名
* @return Children
* @author JiaChaoYang
* @date 2023/8/12 21:07
*/
Children lookup(final String from, final List> letList,
final Aggregate> aggregate, final String as);
/**
* $lookup阶段
* @param from 目标集合名称
* @param aggregate 在连接集合上运行的管道
* @param as 输出结果中保存关联值的字段名
* @return Children
* @author JiaChaoYang
* @date 2023/8/12 21:07
*/
Children lookup(final String from, final Aggregate> aggregate, final String as);
/**
* $lookup阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午6:45
*/
Children lookup(final Bson bson);
/* $lookup阶段 end */
/* =============================================================================== */
/* $facet阶段 start */
/**
* $facet阶段
* @param name facet名称
* @param pipeline facet管道
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:13
*/
Children facet(final String name, final Bson... pipeline);
/**
* $facet阶段
* @param name facet名称
* @param pipeline facet管道
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:13
*/
Children facet(final String name, final List extends Bson> pipeline);
/**
* $facet阶段
* @param name facet名称
* @param aggregate facet管道
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:14
*/
Children facet(final String name, final Aggregate> aggregate);
/**
* $facet阶段
* @param facets facets,可以使用{@link com.anwen.mongo.aggregate.pipeline.Facet}进行构建
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:16
*/
Children facet(final Facet... facets);
/**
* $facet阶段
* @param facets facets,可以使用{@link com.anwen.mongo.aggregate.pipeline.Facet}进行构建
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:16
*/
Children facet(final List facets);
/**
* $facet阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:03
*/
Children facet(final Bson bson);
/* $facet阶段 end */
/* =============================================================================== */
/* $graphLookup阶段 start */
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final Object startWith, final String connectFromField,
final String connectToField, final String as);
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final SFunction startWith, final SFunction connectFromField,
final SFunction connectToField, final String as);
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final Object startWith, final SFunction connectFromField,
final SFunction connectToField, final String as);
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @param options 查找选项:
*
* maxDepth(指定最大递归深度的非负整)
* depthField(要添加到搜索路径中每个遍历文档的字段的名称)
* restrictSearchWithMatch(指定递归搜索的附加条件的文档,不能是表达式,比如不能是{@code { lastName: { $ne: "$lastName" } }})
*
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final Object startWith, final String connectFromField,
final String connectToField, final String as, final GraphLookupOptions options);
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @param options 查找选项:
*
* maxDepth(指定最大递归深度的非负整)
* depthField(要添加到搜索路径中每个遍历文档的字段的名称)
* restrictSearchWithMatch(指定递归搜索的附加条件的文档,不能是表达式,比如不能是{@code { lastName: { $ne: "$lastName" } }})
*
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final SFunction startWith, final SFunction connectFromField,
final SFunction connectToField, final String as, final GraphLookupOptions options);
/**
* $graphLookup阶段
* @param from 要查询的集合
* @param startWith 启动图形查找的表达式
* @param connectFromField 来自字段
* @param connectToField 目标字段
* @param as 输出文档中的字段名称
* @param options 查找选项:
*
* maxDepth(指定最大递归深度的非负整)
* depthField(要添加到搜索路径中每个遍历文档的字段的名称)
* restrictSearchWithMatch(指定递归搜索的附加条件的文档,不能是表达式,比如不能是{@code { lastName: { $ne: "$lastName" } }})
*
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:30
*/
Children graphLookup(final String from, final Object startWith, final SFunction connectFromField,
final SFunction connectToField, final String as, final GraphLookupOptions options);
/**
* $graphLookup阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午8:26
*/
Children graphLookup(final Bson bson);
/* $graphLookup阶段 end */
/* =============================================================================== */
/* $group阶段 start */
/**
* $group阶段,只有一个字段参数的情况,如{@code $group : { _id : "$item" }}
* @param _id group的_id表达式
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午9:12
*/
Children group(final String _id);
/**
* $group阶段,只有一个字段参数的情况,如{@code $group : { _id : "$item" }}
* @param _id group的_id表达式
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午9:12
*/
Children group(final SFunction _id);
/**
* $group阶段
* @param id group的_id表达式,可以为null
* @param fieldAccumulators 零个或多个字段累加器对,使用{@link com.anwen.mongo.aggregate.pipeline.Accumulators}构建
* @return {@link Bson}
* @author anwen
* @date 2024/6/11 下午9:06
*/
Children group(@Nullable final TExpression id, final BsonField... fieldAccumulators);
/**
* $group阶段
* @param id group的_id表达式,可以为null
* @param fieldAccumulators 零个或多个字段累加器对,使用{@link com.anwen.mongo.aggregate.pipeline.Accumulators}构建
* @return {@link Bson}
* @author anwen
* @date 2024/6/11 下午9:07
*/
Children group(@Nullable final TExpression id, final List fieldAccumulators);
/**
* $group阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/11 下午9:04
*/
Children group(final Bson bson);
/* $group阶段 end */
/* =============================================================================== */
/* $unionWith阶段 start */
/**
* $unionWith阶段
* @param collectionName 要执行合并的同一数据库中的集合的名称
* @param aggregate 应用于输入文档的聚合管道
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午8:44
*/
Children unionWith(final String collectionName,final Aggregate> aggregate);
/**
* $unionWith阶段
* @param collectionName 要执行合并的同一数据库中的集合的名称
* @param aggregate 应用于输入文档的聚合管道
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午8:44
*/
Children unionWith(final String collectionName,final List extends Bson> aggregate);
/**
* $unionWith阶段
* @param collection 集合名称,取用类名,如有@CollectionName注解,则取用注解值
* @param aggregate 应用于输入文档的聚合管道
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午8:44
*/
Children unionWith(final Class> collection,final Aggregate> aggregate);
/**
* $unionWith阶段
* @param collection 集合名称,取用类名,如有@CollectionName注解,则取用注解值
* @param aggregate 应用于输入文档的聚合管道
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午8:44
*/
Children unionWith(final Class> collection,final List extends Bson> aggregate);
/**
* $unionWith阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午8:41
*/
Children unionWith(final Bson bson);
/* $unionWith阶段 end */
/* =============================================================================== */
/* $unwind阶段 start */
/**
* $unwind阶段
* @param fieldName 该字段名称必须以'$'符号为前缀
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:02
*/
Children unwind(final String fieldName);
/**
* $unwind阶段
* @param fieldName 字段名称
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:02
*/
Children unwind(final SFunction fieldName);
/**
* $unwind阶段
* @param fieldName 该字段名称必须以'$'符号为前缀
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:02
*/
Children unwind(final String fieldName, final UnwindOption unwindOption);
/**
* $unwind阶段
* @param fieldName 字段名称
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:02
*/
Children unwind(final SFunction fieldName,final UnwindOption unwindOption);
/**
* $unwind阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:02
*/
Children unwind(final Bson bson);
/* $unwind阶段 end */
/* =============================================================================== */
/* $out阶段 start */
/**
* $out阶段
* @param collectionName 集合名称
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:19
*/
Children out(final String collectionName);
/**
* $out阶段
* @param collection 集合名称
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:19
*/
Children out(final Class> collection);
/**
* $out
* @param databaseName 数据库名称
* @param collectionName 集合名称
* @return {@link Bson}
* @author anwen
* @date 2024/6/16 下午9:20
*/
Children out(final String databaseName, final String collectionName);
/**
* $out阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:18
*/
Children out(final Bson bson);
/* $out阶段 end */
/* =============================================================================== */
/* $merge阶段 start */
/**
* $merge阶段
* @param collectionName 要合并的集合的名称
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:49
*/
Children merge(final String collectionName);
/**
* $merge阶段
* @param collection 集合
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:49
*/
Children merge(final Class> collection);
/**
* $merge阶段
* @param namespace 要合并到的命名空间
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:50
*/
Children merge(final MongoNamespace namespace);
/**
* $merge阶段
* @param collectionName 要合并的集合的名称
* @param options 合并选项
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:51
*/
Children merge(final String collectionName, final MergeOptions options);
/**
* $merge阶段
* @param collection 要合并的集合
* @param options 合并选项
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:51
*/
Children merge(final Class> collection, final MergeOptions options);
/**
* $merge阶段
* @param namespace 要合并到的命名空间
* @param options 合并选项
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:52
*/
Children merge(final MongoNamespace namespace, final MergeOptions options);
/**
* $merge阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:47
*/
Children merge(final Bson bson);
/* $out阶段 end */
/* =============================================================================== */
/* replaceRoot阶段 */
/**
* $replaceRoot阶段
* @param fieldName 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:39
*/
Children replaceRoot(final TExpression fieldName);
/**
* $replaceRoot阶段
* @param fieldName 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:39
*/
Children replaceRoot(final SFunction fieldName);
/**
* $replaceRoot阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/16 下午9:56
*/
Children replaceRoot(final Bson bson);
/* $replaceRoot阶段 end */
/* =============================================================================== */
/* $replaceWith阶段 start*/
/**
* $replaceWith阶段
* @param fieldName 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:42
*/
Children replaceWith(final TExpression fieldName);
/**
* $replaceWith阶段
* @param fieldName 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:39
*/
Children replaceWith(final SFunction fieldName);
/**
* $replaceWith阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:42
*/
Children replaceWith(final Bson bson);
/* $replaceWith阶段 end */
/* =============================================================================== */
/* $sample阶段 start */
/**
* $sample阶段
* @param size 指定数量
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:46
*/
Children sample(final int size);
/**
* $sample阶段
* @param size 指定数量
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:46
*/
Children sample(final long size);
/**
* $sample阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午10:45
*/
Children sample(final Bson bson);
/* $sample阶段 end */
/* =============================================================================== */
/* $setWindowFields阶段 start */
/**
* $setWindowFields阶段,可以使用{@link WindowOutputFields}构建WindowOutputField
* 创建一个 {@code $setWindowFields} 管道阶段,允许使用窗口运算符.
* 此阶段对输入文档进行分区,类似于 {@link #group(Object, List) $group} 管道阶段,可选择对它们进行排序,
* 通过计算每个指定的 {@linkplain Window windows} 上的窗口函数来计算文档中的字段函数,并输出文档。
* 与{@code $group}管道阶段的重要区别在于,属于同一分区或窗口的文档不会折叠成单个文档.
*
* @param partitionBy 可选的数据分区,如 {@link #group(Object, List)} 中的 {@code id} 指定.
* 如果{@code null},则所有文档属于同一分区.
* @param sortBy 排序依据的字段。语法与 {@link #sort(Bson)} 中的 {@code sort} 相同(请参阅 {@link com.anwen.mongo.aggregate.pipeline.Sorts}).
* 某些函数需要排序,某些窗口可能需要排序(有关更多详细信息,请参阅{@link Windows}).
* 排序仅用于计算窗口函数,并不保证输出文档的排序.
* @param output {@linkplain WindowOutputField 窗口计算}.
* @param moreOutput 更多{@linkplain WindowOutputField 窗口计算}.
* @param {@code partitionBy} 表达式类型.
* @return {@code $setWindowFields} 管道阶段.
* @author anwen
* @date 2024/6/17 下午11:46
*/
Children setWindowFields(@Nullable final TExpression partitionBy, @Nullable final Bson sortBy,
final WindowOutputField output, final WindowOutputField... moreOutput);
/**
* $setWindowFields阶段,可以使用{@link WindowOutputFields}构建WindowOutputField
* 创建一个 {@code $setWindowFields} 管道阶段,允许使用窗口运算符.
* 此阶段对输入文档进行分区,类似于 {@link #group(Object, List) $group} 管道阶段,
* 可选择对它们进行排序, 通过计算每个指定的 {@linkplain Window windows} 上的窗口函数来计算文档中的字段功能,
* 并输出文档。与 {@code $group} 管道阶段的重要区别在于,属于同一分区或窗口的文档不会折叠成一个文档.
*
* @param partitionBy 数据的可选分区指定为 {@link #group(Object, List)} 中的 {@code id}。如果{@code null},则所有文档属于同一个分区.
* @param sortBy 排序依据的字段。语法与 {@link #sort(Bson)} 中的 {@code sort} 相同(请参阅 {@link com.anwen.mongo.aggregate.pipeline.Sorts}).
* 某些函数需要排序,某些窗口可能需要排序(有关更多详细信息,请参阅{@link Windows}).
* 排序仅用于计算窗口函数,并不保证输出文档的排序.
* @param output {@linkplain WindowOutputField 窗口计算}的列表.
* 指定空列表不是错误,但生成的阶段不会执行任何有用的操作.
* @param {@code partitionBy} 表达式类型.
* @return {@code $setWindowFields} 管道阶段.
* @author anwen
* @date 2024/6/17 下午11:46
*/
Children setWindowFields(@Nullable final TExpression partitionBy, @Nullable final Bson sortBy,
final Iterable extends WindowOutputField> output);
/**
* $setWindowFields阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/17 下午11:41
*/
Children setWindowFields(Bson bson);
/* $setWindowFields阶段 end */
/* =============================================================================== */
/* $densify阶段 start */
/**
* $densify阶段
* @param field 字段
* @param range 范围 指定如何密集化数据的对象
* @return {@link Children}
* @author anwen
* @date 2024/6/18 上午12:03
*/
Children densify(final String field, final DensifyRange range);
/**
* $densify阶段
* @param field 字段
* @param range 范围 指定如何密集化数据的对象
* @return {@link Children}
* @author anwen
* @date 2024/6/18 上午12:04
*/
Children densify(final SFunction field, final DensifyRange range);
/**
* $desify阶段
* @param field 字段
* @param range 范围 制定如何密集化数据的 对象
* @param options 表示聚合管道的$densify管道阶段的可选字段
* @return {@link Children}
* @author anwen
* @date 2024/6/18 上午12:06
*/
Children densify(final String field, final DensifyRange range, final DensifyOptions options);
/**
* $desify阶段
* @param field 字段
* @param range 范围 制定如何密集化数据的 对象
* @param options 表示聚合管道的$densify管道阶段的可选字段
* @return {@link Children}
* @author anwen
* @date 2024/6/18 上午12:06
*/
Children densify(final SFunction field, final DensifyRange range, final DensifyOptions options);
/**
* $desify阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午10:42
*/
Children densify(final Bson bson);
/* $densify阶段 end */
/* =============================================================================== */
/* $fill阶段 start */
/**
* $fill阶段
* @param options 填充选项
* @param output {@link FillOutputField},可以使用{@link com.anwen.mongo.aggregate.pipeline.FillField}
* @param moreOutput {@link FillOutputField},可以使用{@link com.anwen.mongo.aggregate.pipeline.FillField}
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:15
*/
Children fill(final FillOptions options, final FillOutputField output, final FillOutputField... moreOutput);
/**
* $fill阶段
* @param options 填充选项
* @param output {@link FillOutputField},可以使用{@link com.anwen.mongo.aggregate.pipeline.FillField}
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:15
*/
Children fill(final FillOptions options, final Iterable extends FillOutputField> output);
/**
* $fill阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午10:51
*/
Children fill(final Bson bson);
/* $fill阶段 end */
/* =============================================================================== */
/* $unset阶段 start */
/**
* $unset阶段
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:21
*/
Children unset(final String... field);
/**
* $unset阶段
* @param field 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:21
*/
Children unset(final SFunction... field);
/**
* $unset阶段
* @param fields 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:22
*/
Children unset(final List fields);
/**
* $unset阶段
* @param fields 字段
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:22
*/
Children unsetLambda(final List> fields);
/**
* $unset阶段,如果MongoPlus封装的条件未满足该阶段的需求,请自行构建Bson
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/19 下午11:19
*/
Children unset(final Bson bson);
/**
* 如果缺少管道,请使用该方法构建
* @param bson bson
* @return {@link Children}
* @author anwen
* @date 2024/6/7 下午5:49
*/
Children custom(final Bson bson);
}