It seems like you should be able to use a bson.A to hold several bson.D or bson.M documents to create an aggregation pipeline. But when I try I get the error "cannot transform type primitive.A to a *bsonx.Document".
Example:
pipeline := bson.A{ bson.M{"$match": bson.M{"userID": userID}}, bson.M{"$sort": bson.M{"date": -1}}, bson.M{"$limit": defaultLimit}, // other steps } _, err := collection.Aggregate(context.Background(), pipeline) err.Error() == "cannot transform type primitive.A to a *bsonx.Document"