Skip to content

Generic Collection

mongox provides a generic Collection object, which allows you to interact with MongoDB collections using method chaining, making data operations more convenient.

Creating a Generic Collection

go
type User struct {
  mongox.Model `bson:"inline"`
  Name         string `bson:"name"`
  Age          int    `bson:"age"`
}

// Example code for reference
func newMongoClient() (*mongo.Client, error) {
  client, err := mongo.Connect(options.Client().ApplyURI("mongodb://localhost:27017").SetAuth(options.Credential{
      Username:   "test",
      Password:   "test",
      AuthSource: "db-test",
  }))
  if err != nil {
      return nil, err
  }
  err = client.Ping(context.Background(), readpref.Primary())
  if err != nil {
      panic(err)
  }
  return client, nil
}

mongoClient, err := newMongoClient()
if err != nil {
  panic(err)
}
client := mongox.NewClient(mongoClient, &mongox.Config{})
database := client.NewDatabase("db-test")

userColl := mongox.NewCollection[User](database, "users")

Using the mongox.NewCollection function, we can specify the generic type and create a generic Collection object. This allows us to perform operations on documents of type User using the userColl object.

Global plugins registered via the database object are automatically passed to the userColl object, so the global plugins will apply to operations on userColl.