public static Accumulator sum(String... path) { return new Accumulator(Op.$sum, Expression.path(path)); }
public static Accumulator min(String... path) { return new Accumulator(Op.$min, Expression.path(path)); }
public static Accumulator max(String... path) { return new Accumulator(Op.$max, Expression.path(path)); }
public static Accumulator last(String... path) { return new Accumulator(Op.$last, Expression.path(path)); }
public static Accumulator first(String... path) { return new Accumulator(Op.$first, Expression.path(path)); }
public static Accumulator list(String... path) { return new Accumulator(Op.$push, Expression.path(path)); }
public static Accumulator distinct(String... path) { return new Accumulator(Op.$addToSet, Expression.path(path)); }
public static Group by(String key) { return new Group(Expression.path(key)); }
public Pipeline<Group.Accumulator> group(String... key) { return then(Group.by(Expression.path(key))); }
public static Accumulator average(String... path) { return new Accumulator(Op.$avg, Expression.path(path)); }
public static Pipeline<Group.Accumulator> group(String key) { return new Pipeline<Group.Accumulator>(Group.by(Expression.path(key))); }
public static Project field(String field, String... path) { return new Project(field, Expression.path(path)); }