package wmo import ( "context" "errors" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func (c *Coll[TData]) Aggregate(ctx context.Context, pipeline mongo.Pipeline, opts ...*options.AggregateOptions) ([]TData, error) { cursor, err := c.coll.Aggregate(ctx, pipeline, opts...) if err != nil { return nil, err } res, err := c.decodeAll(ctx, cursor) if err != nil { return nil, err } return res, nil } func (c *Coll[TData]) AggregateOneOpt(ctx context.Context, pipeline mongo.Pipeline, opts ...*options.AggregateOptions) (*TData, error) { cursor, err := c.coll.Aggregate(ctx, pipeline, opts...) if err != nil { return nil, err } if cursor.Next(ctx) { v, err := c.decodeSingle(ctx, cursor) if err != nil { return nil, err } return &v, nil } return nil, nil } func (c *Coll[TData]) AggregateOne(ctx context.Context, pipeline mongo.Pipeline, opts ...*options.AggregateOptions) (TData, error) { cursor, err := c.coll.Aggregate(ctx, pipeline, opts...) if err != nil { return *new(TData), err } if cursor.Next(ctx) { v, err := c.decodeSingle(ctx, cursor) if err != nil { return *new(TData), err } return v, nil } return *new(TData), errors.New("no document in result") }