Part of the GoCroot ecosystem. Used by GoCroot Core.
This package (mgdb) provides a set of helper functions to simplify interaction with MongoDB from a Golang application. It includes connection handling, querying, inserting, updating, deleting documents, and working with distinct and random documents.
To use this package, install it using:
go get github.com/gocroot/mgdb
Then, include the package in your Go project:
import "github.com/gocroot/mgdb"
mconn := mgdb.DBInfo{
DBString: "mongodb+srv://username:password@cluster.mongodb.net/mydatabase",
DBName: "mydatabase",
}
db, err := mgdb.MongoConnect(mconn)
if err != nil {
log.Fatal(err)
}
If u want to call inside a config folder
package config
import (
"os"
"github.com/gocroot/mgdb"
)
var mconn = mgdb.DBInfo{
DBString: os.Getenv("MONGOSTRING"),
DBName: "mydatabase",
}
var Mongoconn, ErrorMongoconn = mgdb.MongoConnect(mconn)
doc := bson.M{"name": "John Doe", "age": 30}
id, err := mgdb.InsertOneDoc(db, "users", doc)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted ID:", id)
docs := []bson.M{
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 28},
}
ids, err := mgdb.InsertManyDocs(db, "users", docs)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted IDs:", ids)
filter := bson.M{"name": "John Doe"}
user, err := mgdb.GetOneDoc[struct {
Name string `bson:"name"`
Age int `bson:"age"`
}](db, "users", filter)
if err != nil {
log.Fatal(err)
}
fmt.Println("User:", user)
filter := bson.M{} // Empty filter to get all documents
users, err := mgdb.GetAllDoc[[]struct{Name string `bson:"name"`; Age int `bson:"age"`}](db, "users", filter)
if err != nil {
log.Fatal(err)
}
fmt.Println("Users:", users)
values, err := mgdb.GetAllDistinct[string](db, bson.M{}, "name", "users")
if err != nil {
log.Fatal(err)
}
fmt.Println("Distinct Names:", values)
randomUsers, err := mgdb.GetRandomDoc[struct{Name string `bson:"name"`; Age int `bson:"age"`}](db, "users", 2)
if err != nil {
log.Fatal(err)
}
fmt.Println("Random Users:", randomUsers)
filter := bson.M{"name": "John Doe"}
updateFields := bson.M{"age": 31}
_, err := mgdb.UpdateOneDoc(db, "users", filter, updateFields)
if err != nil {
log.Fatal(err)
}
newUser := struct {
Name string `bson:"name"`
Age int `bson:"age"`
City string `bson:"city"`
}{"John Doe", 32, "New York"}
_, err := mgdb.ReplaceOneDoc(db, "users", filter, newUser)
if err != nil {
log.Fatal(err)
}
_, err := mgdb.DeleteOneDoc(db, "users", filter)
if err != nil {
log.Fatal(err)
}
_, err := mgdb.DeleteManyDocs(db, "users", bson.M{"age": bson.M{"$lt": 30}})
if err != nil {
log.Fatal(err)
}
err := mgdb.DropCollection(db, "users")
if err != nil {
log.Fatal(err)
}
type Hobby struct {
Name string `bson:"name"`
}
newHobby := Hobby{Name: "Cycling"}
_, err := mgdb.AddDocToArray[Hobby](db, "users", userID, "hobbies", newHobby)
if err != nil {
log.Fatal(err)
}
hobbyToRemove := Hobby{Name: "Cycling"}
_, err := mgdb.DeleteDocFromArray[Hobby](db, "users", userID, "hobbies", hobbyToRemove)
if err != nil {
log.Fatal(err)
}
filterCondition := bson.M{"name": "Cycling"}
updatedFields := bson.M{"name": "Mountain Biking"}
_, err := mgdb.EditDocInArray(db, "users", userID, "hobbies", filterCondition, updatedFields)
if err != nil {
log.Fatal(err)
}
startDay, endDay := mgdb.GetYesterdayStartEnd()
dateNow := mgdb.GetDateSekarang()
todayFilter := mgdb.TodayFilter()
yesterdayFilter := mgdb.YesterdayFilter()
yesterdayNotHolidayFilter := mgdb.YesterdayNotLiburFilter()
yesterdayNonHoliday := mgdb.GetDateKemarinBukanHariLibur()
isHoliday := mgdb.HariLibur(time.Now())
This package is open-source and available for use under the MIT License.
mgdb.OperationTimeout (default 30 detik), termasuk koneksi awal. Ubah sebelum dipakai jika perlu, misalnya mgdb.OperationTimeout = 10 * time.Second.MongoConnect mengembalikan error untuk URI kosong atau rusak. Untuk fallback SRV, gunakan mgdb.LookupSRV(uri) yang mengembalikan error. SRVLookup lama tetap ada (deprecated) dan mengembalikan string kosong jika gagal.UpdateOneDoc membuat dokumen baru jika filter tidak cocok.map/bson.M hasil decode JSON dari request langsung ke filter, karena input seperti {"$ne": null} bisa mengubah arti query. Decode ke struct dengan field bertipe jelas (misalnya string), lalu susun filter sendiri. EditDocInArray menolak nama field yang diawali $.HariLibur tidak memanggil API untuk Sabtu/Minggu, dan menyimpan daftar libur per bulan di cache selama 12 jam. Endpoint bisa diganti lewat mgdb.HolidayAPIURL, client HTTP lewat mgdb.HTTPClient (timeout 15 detik).Rilis dibuat otomatis oleh workflow Auto Tag & Release setiap ada push ke main yang mengubah kode Go, go.mod, atau go.sum. Jangan membuat tag manual. Kenaikan versi mengikuti pesan commit: fix: → patch, feat: → minor, dan [skip release] untuk melewati rilis. Rilis manual bisa lewat tab Actions → Run workflow.
go get -u ./...
go mod tidy
go list -m -versions github.com/gocroot/mgdb