A generic MongoDB repository implementation in Go that provides a reusable abstraction layer for MongoDB operations.
- Generic repository interface for any entity type
- Type-safe implementations
- Standard CRUD operations
- Query builder support
- Extensible for entity-specific operations
go get github.com/dinson/mongokittype User struct {
ID *primitive.ObjectId `bson:"_id,omitempty"` // important to name the primary key as "_id" and include "omitempty" tag
Name string `bson:"name"`
}
repo := NewRepository[User](mongoCollection) // mongoCollection is collection object (from official mongoDB driver)
user := &User{}
id, err := repo.Save(ctx, user, nil)
user := &User{}
id, err := repo.Save(ctx, user, &userID) // userID is the id hex
query, _ := queryBuilder.New().EqualString("status", "active").Build()
users, err := repo.Find(ctx, query)
query, _ := queryBuilder.New().EqualString("email", "user@example.com").Build()
user, err := repo.FindOne(ctx, query)
// delete one document by id
query := queryBuilder.New().EqualsIDHex("_id", id).Build()
err := repo.DeleteOne(ctx, query)
// delete multiple documents
query := queryBuilder.New().EqualString("name", "Dan").Build()
err := repo.DeleteMany(ctx, query)
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a new Pull Request