goodm

package module
v0.0.0-...-5be7bc9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 13, 2023 License: Apache-2.0 Imports: 11 Imported by: 0

README

Goodm

  1. About The Project
  2. Installation
  3. Connection
  4. Define Document
  5. Save a Document
  6. Save and serialize output
  7. List documents
  8. Operators
  9. Usage
  10. Contributing
  11. License

About The Project

Golang ODM based on the official MongoDB driver.

Installation

go get github.com/angrypufferfish/goodm

Connection

import (
  "context"
  "github.com/angrypufferfish/goodm"
)

func Connect() {

  var iGoodm goodm.Goodm
  ctx := context.Background()

  client, err := iGoodm.Connect("mongodb://localhost:27017", 10000)

  ///!
  defer iGoodm.Disconnect()

  if err != nil {
    panic(err)
  }
  client.UseDatabase("test", &ctx)
}

Define Document

package example

import (
  "github.com/angrypufferfish/goodm/src/base"
)

type UserInfo struct {
  Address string `json:"address" bson:"address"`
}

type User struct {
  //Define collection name on goodm tag
  base.BaseDocument `json:",inline" bson:",inline" goodm:"users"`

  LastName  string     `json:"lastName" bson:"lastName"`
  FirstName string     `json:"firstName" bson:"firstName"`
  Info  UserInfo       `json:"info" bson:"info"`
}

Usage

Save a document
package example

import (
  "github.com/angrypufferfish/goodm"
)

user := &User{
	FirstName: "Mario",
	LastName:  "Rossi",
	Info: UserInfo{
		Address: "via campo",
	},
}

savedUser := goodm.Create[User](user)

Save and serialize output
package example

import (
  "github.com/angrypufferfish/goodm"
)

type UserName struct {
	FirstName string            `json:"firstName" bson:"firstName"`
	LastName string             `json:"lastName" bson:"lastName"`
}

user := &User{
	FirstName: "Mario",
	LastName:  "Rossi",
	Info: UserInfo{
		Address: "via campo",
	},
}

savedUser := goodm.CreateAndSerialize[User, UserName](user)
//output usr
//{
//  "firstName": "Mario",
//  "lastName": "Rossi",
//}
List
package example

import (
  "github.com/angrypufferfish/goodm"
)

type UserName struct {
	FirstName string            `json:"firstName" bson:"firstName"`
	LastName string             `json:"lastName" bson:"lastName"`
}

//Output users: []User
users := goodm.FindAll[User]()

//Output serializedUsers: []UserName
serializedUsers := goodm.FindAllAndSerialize[User, UserName]()

Operators
package example

import (
  "github.com/angrypufferfish/goodm"
  "github.com/angrypufferfish/goodm/src/query"
)


/// {"$and": [
///    {"lastName": {"$ne": "Doe"}},
///    {"firstName": {"$eq": "Mario"}}
///  ]}
users := goodm.Find[User](
  query.And(
    ///{"lastName": {"$ne": "Doe"}}
		query.Ne("lastName", "Doe"),
    ///{"firstName": {"$eq": "Mario"}}
		query.Eq("firstName", "Mario"),
	),
)


Contributing

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue.

License

Distributed under the APACHE LICENSE 2.0 See LICENSE.txt for more information.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Create

func Create[D any](document base.IBaseDocument) *D

func CreateAndSerialize

func CreateAndSerialize[D any, S any](document base.IBaseDocument) *S

func DeleteMany

func DeleteMany[D any](filter any, opts ...*options.DeleteOptions) (*int64, error)

func Find

func Find[D any](filters any, opts ...*options.FindOptions) []D

func FindAll

func FindAll[D any](opts ...*options.FindOptions) []D

func FindAllAndSerialize

func FindAllAndSerialize[D any, S any](opts ...*options.FindOptions) []S

func FindAndSerialize

func FindAndSerialize[D any, S any](filters any, opts ...*options.FindOptions) []S

func FindOne

func FindOne[D any](filters any, opts ...*options.FindOneOptions) *D

func FindOneAndSerialize

func FindOneAndSerialize[D any, S any](filters any, opts ...*options.FindOneOptions) *S

func Get

func Get[D any](id primitive.ObjectID) *D

func Remove

func Remove[D any](document base.IBaseDocument) *D

func RemoveByID

func RemoveByID[D any](id primitive.ObjectID) bool

func Update

func Update[D any](document base.IBaseDocument, update any, opts ...*options.UpdateOptions) (*D, error)

func UpdateMany

func UpdateMany[D any](filter any, update any, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)

func UpdateSelf

func UpdateSelf[D any](document base.IBaseDocument, opts ...*options.UpdateOptions) (*D, error)

* UPDATE FUNCTIONS *

Types

type Goodm

type Goodm struct {
	// contains filtered or unexported fields
}

func (*Goodm) Connect

func (odm *Goodm) Connect(uri string, timeout time.Duration, opts ...*options.ClientOptions) (*database.GoodmClient, error)

func (*Goodm) ConnectMock

func (odm *Goodm) ConnectMock(mtestClient *mongo.Client) *database.GoodmClient

func (*Goodm) Disconnect

func (odm *Goodm) Disconnect()

Directories

Path Synopsis
src

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL