The MongoDB ODM for Go i've always wanted. Inspired by Mongoose.
Colt wraps the official mongo-go-driver.
- Go 1.18 or higher. Colt leverages Generics to provide type-safe methods and decoding of documents.
To install Colt, use go get
:
go get github.com/jensteichert/colt
package main
import (
"fmt"
"github.com/jensteichert/colt"
"go.mongodb.org/mongo-driver/bson"
)
type Database struct {
Todos *colt.Collection[*Todo]
}
type Todo struct {
colt.DocWithTimestamps `bson:",inline"`
Title string `bson:"title" json:"title"`
}
func main() {
db := colt.Database{}
db.Connect("mongodb://...", "myDatabaseName")
database := Database{
Todos: colt.GetCollection[*Todo](&db, "todos"),
}
newTodo := Todo{Title: "Hello"}
todo, _ := database.Todos.Insert(&newTodo) // Will return a Todo
insertedTodo, _ := database.Todos.FindById(todo.ID)
allTodos, _ := database.Todos.Find(bson.M{"title": "Hello"})
}
Triggers before a document will be inserted
type Todo struct {
colt.DocWithTimestamps `bson:",inline"`
}
func(t *Todo) BeforeInsert() error {
t.DocWithTimestamps.BeforeInsert()
// Do something with t here
return nil
}
Triggers before a document will be updated
func(t *Todo) BeforeUpdate() error {
t.DocWithTimestamps.BeforeUpdate()
// Do something with t here
return nil
}
Can be used to generate custom ids for documents within a collection
func (t *Todo) NewID() string {
return "td_" + primitive.NewObjectID().Hex()
}
- CRUD
- Hooks
- Disconnect
- Context
- Transactions