|
|
|
package mongox
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Reexport basic mongo structs
|
|
|
|
type (
|
|
|
|
Cursor = mongo.Cursor
|
|
|
|
Client = mongo.Client
|
|
|
|
Collection = mongo.Collection
|
|
|
|
)
|
|
|
|
|
|
|
|
// Database is the mongox database interface
|
|
|
|
type Database interface {
|
|
|
|
Client() (client *Client)
|
|
|
|
Context() (context context.Context)
|
|
|
|
Name() (name string)
|
|
|
|
New(ctx context.Context) (db Database)
|
|
|
|
GetCollectionOf(document interface{}) (collection *Collection)
|
|
|
|
Count(target interface{}, filters ...interface{}) (count int64, err error)
|
|
|
|
DeleteArray(target interface{}, filters ...interface{}) (err error)
|
|
|
|
DeleteOne(target interface{}, filters ...interface{}) (err error)
|
|
|
|
LoadArray(target interface{}, filters ...interface{}) (err error)
|
|
|
|
LoadOne(target interface{}, filters ...interface{}) (err error)
|
|
|
|
LoadStream(target interface{}, filters ...interface{}) (loader StreamLoader, err error)
|
|
|
|
SaveOne(source interface{}) (err error)
|
|
|
|
IndexEnsure(cfg interface{}, document interface{}) (err error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StreamLoader is a interface to control database cursor
|
|
|
|
type StreamLoader interface {
|
|
|
|
Cursor() (cursor *Cursor)
|
|
|
|
DecodeNext() (err error)
|
|
|
|
Decode() (err error)
|
|
|
|
Next() (err error)
|
|
|
|
Close() (err error)
|
|
|
|
Err() (err error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// OIDBased is an interface for documents that have objectId type for the _id field
|
|
|
|
type OIDBased interface {
|
|
|
|
GetID() (id primitive.ObjectID)
|
|
|
|
SetID(id primitive.ObjectID)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StringBased is an interface for documents that have string type for the _id field
|
|
|
|
type StringBased interface {
|
|
|
|
GetID() (id string)
|
|
|
|
SetID(id string)
|
|
|
|
}
|
|
|
|
|
|
|
|
// JSONBased is an interface for documents that have object type for the _id field
|
|
|
|
type JSONBased interface {
|
|
|
|
GetID() (id primitive.D)
|
|
|
|
SetID(id primitive.D)
|
|
|
|
}
|
|
|
|
|
|
|
|
// InterfaceBased is an interface for documents that have custom declated type for the _id field
|
|
|
|
type InterfaceBased interface {
|
|
|
|
GetID() (id interface{})
|
|
|
|
SetID(id interface{})
|
|
|
|
}
|