Documentation
¶
Index ¶
- Variables
- func CompareVersions(v1 string, v2 string) (int, error)
- func IsDup(err error) bool
- func IsErrNoDocuments(err error) bool
- func NewObjectID() primitive.ObjectID
- func Now() time.Time
- func SplitSortField(field string) (key string, sort int32)
- type Aggregate
- type AggregateI
- type Client
- func (c *Client) Close(ctx context.Context) error
- func (c *Client) Database(name string) *Database
- func (c *Client) DoTransaction(ctx context.Context, ...) (interface{}, error)
- func (c *Client) Ping(timeout int64) error
- func (c *Client) ServerVersion() string
- func (c *Client) Session() (*Session, error)
- type Collection
- func (c *Collection) Aggregate(ctx context.Context, pipeline interface{}) AggregateI
- func (c *Collection) CloneCollection() (*mongo.Collection, error)
- func (c *Collection) DeleteAll(ctx context.Context, filter interface{}) (result *DeleteResult, err error)
- func (c *Collection) DropCollection(ctx context.Context) error
- func (c *Collection) DropIndexes(ctx context.Context, indexes []string) error
- func (c *Collection) EnsureIndexes(ctx context.Context, uniques []string, indexes []string)
- func (c *Collection) Find(ctx context.Context, filter interface{}) QueryI
- func (c *Collection) GetCollectionName() string
- func (c *Collection) InsertMany(ctx context.Context, docs []interface{}) (result *InsertManyResult, err error)
- func (c *Collection) InsertOne(ctx context.Context, doc interface{}) (result *InsertOneResult, err error)
- func (c *Collection) Remove(ctx context.Context, filter interface{}) (err error)
- func (c *Collection) RemoveId(ctx context.Context, id string) (err error)
- func (c *Collection) UpdateAll(ctx context.Context, filter interface{}, update interface{}) (result *UpdateResult, err error)
- func (c *Collection) UpdateOne(ctx context.Context, filter interface{}, update interface{}) error
- func (c *Collection) Upsert(ctx context.Context, filter interface{}, replacement interface{}) (result *UpdateResult, err error)
- type Config
- type Credential
- type Cursor
- type CursorI
- type Database
- type DeleteResult
- type InsertManyResult
- type InsertOneResult
- type Pipeline
- type QmgoClient
- type Query
- func (q *Query) All(result interface{}) error
- func (q *Query) Count() (n int64, err error)
- func (q *Query) Cursor() CursorI
- func (q *Query) Distinct(key string, result interface{}) error
- func (q *Query) Limit(n int64) QueryI
- func (q *Query) One(result interface{}) error
- func (q *Query) Select(projection interface{}) QueryI
- func (q *Query) Skip(n int64) QueryI
- func (q *Query) Sort(fields ...string) QueryI
- type QueryI
- type ReadPref
- type Session
- type UpdateResult
Constants ¶
This section is empty.
Variables ¶
var ( // ErrQueryNotSlicePointer return if result argument is not a pointer to a slice ErrQueryNotSlicePointer = errors.New("result argument must be a pointer to a slice") // ErrQueryNotSliceType return if result argument is not slice address ErrQueryNotSliceType = errors.New("result argument must be a slice address") // ErrQueryResultTypeInconsistent return if result type is not equal mongodb value type ErrQueryResultTypeInconsistent = errors.New("result type is not equal mongodb value type") // ErrQueryResultValCanNotChange return if the value of result can not be changed ErrQueryResultValCanNotChange = errors.New("the value of result can not be changed") // ErrNoSuchDocuments return if no document found ErrNoSuchDocuments = errors.New(mongo.ErrNoDocuments.Error()) // ErrTransactionRetry return if transaction need to retry ErrTransactionRetry = errors.New("retry transaction") // ErrTransactionRetry return if transaction not supported ErrTransactionNotSupported = errors.New("transaction not supported") )
Functions ¶
func CompareVersions ¶ added in v0.6.0
compareVersions compares two version number strings (i.e. positive integers separated by periods). Comparisons are done to the lesser precision of the two versions. For example, 3.2 is considered equal to 3.2.11, whereas 3.2.0 is considered less than 3.2.11.
Returns a positive int if version1 is greater than version2, a negative int if version1 is less than version2, and 0 if version1 is equal to version2.
func IsErrNoDocuments ¶ added in v0.5.3
IsErrNoDocuments check if err is no documents, both mongo-go-driver error and qmgo custom error
func NewObjectID ¶ added in v0.5.3
NewObjectID generates a new ObjectID. Watch out: the way it generates objectID is different from mgo
func SplitSortField ¶
SplitSortField handle sort symbol: "+"/"-" in front of field if "+", return sort as 1 if "-", return sort as -1
Types ¶
type Aggregate ¶
type Aggregate struct {
// contains filtered or unexported fields
}
Aggregate is a handle to a aggregate
type AggregateI ¶
type AggregateI interface {
All(results interface{}) error
One(result interface{}) error
Iter() CursorI
}
AggregateI define the interface of aggregate
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client creates client to mongo
func (*Client) DoTransaction ¶ added in v0.6.0
func (c *Client) DoTransaction(ctx context.Context, callback func(sessCtx context.Context) (interface{}, error)) (interface{}, error)
DoTransaction do whole transaction in one function precondition: - version of mongoDB server >= v4.0 - Topology of mongoDB server is not Single At the same time, please pay attention to the following
- make sure all operations in callback use the sessCtx as context parameter
- if operations in callback takes more than(include equal) 120s, the operations will not take effect,
- if operation in callback return qmgo.ErrTransactionRetry, the whole transaction will retry, so this transaction must be idempotent
- if operations in callback return qmgo.ErrTransactionNotSupported,
- If the ctx parameter already has a Session attached to it, it will be replaced by this session.
func (*Client) ServerVersion ¶ added in v0.6.0
ServerVersion get the version of mongoDB server, like 4.4.0
type Collection ¶
type Collection struct {
// contains filtered or unexported fields
}
Collection is a handle to a MongoDB collection
func (*Collection) Aggregate ¶
func (c *Collection) Aggregate(ctx context.Context, pipeline interface{}) AggregateI
Aggregate executes an aggregate command against the collection and returns a AggregateI to get resulting documents.
func (*Collection) CloneCollection ¶
func (c *Collection) CloneCollection() (*mongo.Collection, error)
CloneCollection creates a copy of the Collection
func (*Collection) DeleteAll ¶
func (c *Collection) DeleteAll(ctx context.Context, filter interface{}) (result *DeleteResult, err error)
DeleteAll executes a delete command to delete documents from the collection. If filter is bson.M{},all ducuments in Collection will be deleted Reference: https://docs.mongodb.com/manual/reference/command/delete/
func (*Collection) DropCollection ¶
func (c *Collection) DropCollection(ctx context.Context) error
DropCollection drops collection it's safe even collection is not exists
func (*Collection) DropIndexes ¶ added in v0.6.1
func (c *Collection) DropIndexes(ctx context.Context, indexes []string) error
DropIndexes drop indexes in collection, indexes that be dropped should be in line with inputting indexes
func (*Collection) EnsureIndexes ¶
func (c *Collection) EnsureIndexes(ctx context.Context, uniques []string, indexes []string)
EnsureIndexes creates unique and non-unique indexes in collection
func (*Collection) Find ¶
func (c *Collection) Find(ctx context.Context, filter interface{}) QueryI
Find find by condition filter,return QueryI
func (*Collection) GetCollectionName ¶
func (c *Collection) GetCollectionName() string
GetCollectionName returns the name of collection
func (*Collection) InsertMany ¶
func (c *Collection) InsertMany(ctx context.Context, docs []interface{}) (result *InsertManyResult, err error)
InsertMany executes an insert command to insert multiple documents into the collection. e.g. docs := []interface{}{myDocsInstance1, myDocsInstance2} TODO need a function which translate slice to []interface Reference: https://docs.mongodb.com/manual/reference/command/insert/
func (*Collection) InsertOne ¶
func (c *Collection) InsertOne(ctx context.Context, doc interface{}) (result *InsertOneResult, err error)
InsertOne insert one document into the collection Reference: https://docs.mongodb.com/manual/reference/command/insert/
func (*Collection) Remove ¶
func (c *Collection) Remove(ctx context.Context, filter interface{}) (err error)
Remove executes a delete command to delete at most one document from the collection. if filter is bson.M{},DeleteOne will delete one document in collection Reference: https://docs.mongodb.com/manual/reference/command/delete/
func (*Collection) RemoveId ¶ added in v0.5.3
func (c *Collection) RemoveId(ctx context.Context, id string) (err error)
RemoveId executes a delete command to delete at most one document from the collection.
func (*Collection) UpdateAll ¶
func (c *Collection) UpdateAll(ctx context.Context, filter interface{}, update interface{}) (result *UpdateResult, err error)
UpdateAll executes an update command to update documents in the collection. The matchedCount is 0 in UpdateResult if no document updated Reference: https://docs.mongodb.com/manual/reference/operator/update/
func (*Collection) UpdateOne ¶ added in v0.5.2
func (c *Collection) UpdateOne(ctx context.Context, filter interface{}, update interface{}) error
UpdateOne executes an update command to update at most one document in the collection. Reference: https://docs.mongodb.com/manual/reference/operator/update/
func (*Collection) Upsert ¶
func (c *Collection) Upsert(ctx context.Context, filter interface{}, replacement interface{}) (result *UpdateResult, err error)
Upsert updates one documents if filter match, inserts one document if filter is not match Reference: https://docs.mongodb.com/manual/reference/operator/update/
type Config ¶
type Config struct {
// URI example: [mongodb://][user:pass@]host1[:port1][,host2[:port2],...][/database][?options]
// URI Reference: https://docs.mongodb.com/manual/reference/connection-string/
Uri string `json:"uri"`
Database string `json:"database"`
Coll string `json:"coll"`
// ConnectTimeoutMS specifies a timeout that is used for creating connections to the server.
// If set to 0, no timeout will be used.
// The default is 30 seconds.
ConnectTimeoutMS *int64 `json:"connectTimeoutMS"`
// MaxPoolSize specifies that maximum number of connections allowed in the driver's connection pool to each server.
// If this is 0, it will be set to math.MaxInt64,
// The default is 100.
MaxPoolSize *uint64 `json:"maxPoolSize"`
// MinPoolSize specifies the minimum number of connections allowed in the driver's connection pool to each server. If
// this is non-zero, each server's pool will be maintained in the background to ensure that the size does not fall below
// the minimum. This can also be set through the "minPoolSize" URI option (e.g. "minPoolSize=100"). The default is 0.
MinPoolSize *uint64 `json:"minPoolSize"`
// SocketTimeoutMS specifies how long the driver will wait for a socket read or write to return before returning a
// network error. If this is 0 meaning no timeout is used and socket operations can block indefinitely.
// The default is 300,000 ms.
SocketTimeoutMS *int64 `json:"socketTimeoutMS"`
// ReadPreference determines which servers are considered suitable for read operations.
// default is PrimaryMode
ReadPreference *ReadPref `json:"readPreference"`
// can be used to provide authentication options when configuring a Client.
Auth *Credential `json:"auth"`
// PoolMonitor to receive connection pool events
PoolMonitor *event.PoolMonitor
}
Config for initial mongodb instance
type Credential ¶ added in v0.6.1
type Credential struct {
AuthMechanism string `json:"authMechanism"`
AuthSource string `json:"authSource"`
Username string `json:"username"`
Password string `json:"password"`
PasswordSet bool `json:"passwordSet"`
}
Credential can be used to provide authentication options when configuring a Client.
AuthMechanism: the mechanism to use for authentication. Supported values include "SCRAM-SHA-256", "SCRAM-SHA-1", "MONGODB-CR", "PLAIN", "GSSAPI", "MONGODB-X509", and "MONGODB-AWS". This can also be set through the "authMechanism" URI option. (e.g. "authMechanism=PLAIN"). For more information, see https://docs.mongodb.com/manual/core/authentication-mechanisms/. AuthSource: the name of the database to use for authentication. This defaults to "$external" for MONGODB-X509, GSSAPI, and PLAIN and "admin" for all other mechanisms. This can also be set through the "authSource" URI option (e.g. "authSource=otherDb").
Username: the username for authentication. This can also be set through the URI as a username:password pair before the first @ character. For example, a URI for user "user", password "pwd", and host "localhost:27017" would be "mongodb://user:pwd@localhost:27017". This is optional for X509 authentication and will be extracted from the client certificate if not specified.
Password: the password for authentication. This must not be specified for X509 and is optional for GSSAPI authentication.
PasswordSet: For GSSAPI, this must be true if a password is specified, even if the password is the empty string, and false if no password is specified, indicating that the password should be taken from the context of the running process. For other mechanisms, this field is ignored.
type Cursor ¶
type Cursor struct {
// contains filtered or unexported fields
}
Cursor struct define
func (*Cursor) All ¶
All iterates the cursor and decodes each document into results. The results parameter must be a pointer to a slice. recommend to use All() in struct Query or Aggregate
func (*Cursor) Close ¶
Close closes this cursor. Next and TryNext must not be called after Close has been called. When the cursor object is no longer in use, it should be actively closed
type CursorI ¶
type CursorI interface {
Next(result interface{}) bool
Close() error
Err() error
All(reuslts interface{}) error
}
CursorI Cursor interface
type Database ¶
type Database struct {
// contains filtered or unexported fields
}
Database is a handle to a MongoDB database
func (*Database) Collection ¶
func (d *Database) Collection(name string) *Collection
Collection gets collection from database
func (*Database) DropDatabase ¶
DropDatabase drops database
func (*Database) GetDatabaseName ¶
GetDatabaseName returns the name of database
type DeleteResult ¶
type DeleteResult struct {
DeletedCount int64 // The number of documents deleted.
}
DeleteResult is the result type returned by DeleteOne and DeleteMany operations.
type InsertManyResult ¶
type InsertManyResult struct {
// The _id values of the inserted documents. Values generated by the driver will be of type primitive.ObjectID.
InsertedIDs []interface{}
}
InsertManyResult is a result type returned by an InsertMany operation.
type InsertOneResult ¶
type InsertOneResult struct {
// The _id of the inserted document. A value generated by the driver will be of type primitive.ObjectID.
InsertedID interface{}
}
InsertOneResult is the result type returned by an InsertOne operation.
type QmgoClient ¶
type QmgoClient struct {
*Collection
*Database
*Client
}
QmgoClient specifies the instance to operate mongoDB
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
Query struct definition
func (*Query) All ¶
All query multiple records that meet the filter conditions The static type of result must be a slice pointer
func (*Query) Cursor ¶
Cursor gets a Cursor object, which can be used to traverse the query result set After obtaining the CursorI object, you should actively call the Close interface to close the cursor
func (*Query) Distinct ¶
Distinct gets the unique value of the specified field in the collection and return it in the form of slice result should be passed a pointer to slice The function will verify whether the static type of the elements in the result slice is consistent with the data type obtained in mongodb reference https://docs.mongodb.com/manual/reference/command/distinct/
func (*Query) Limit ¶
Limit limits the maximum number of documents found to n The default value is 0, and 0 means no limit, and all matching results are returned When the limit value is less than 0, the negative limit is similar to the positive limit, but the cursor is closed after returning a single batch result. Reference https://docs.mongodb.com/manual/reference/method/cursor.limit/index.html
func (*Query) One ¶
One query a record that meets the filter conditions If the search fails, an error will be returned
func (*Query) Select ¶
Select is used to determine which fields are displayed or not displayed in the returned results Format: bson.M{"age": 1} means that only the age field is displayed bson.M{"age": 0} means to display other fields except age When _id is not displayed and is set to 0, it will be returned to display
func (*Query) Sort ¶
Sort is Used to set the sorting rules for the returned results Format: "age" or "+age" means to sort the age field in ascending order, "-age" means in descending order When multiple sort fields are passed in at the same time, they are arranged in the order in which the fields are passed in. For example, {"age", "-name"}, first sort by age in ascending order, then sort by name in descending order
type QueryI ¶
type QueryI interface {
Sort(fields ...string) QueryI
Select(selector interface{}) QueryI
Skip(n int64) QueryI
Limit(n int64) QueryI
One(result interface{}) error
All(result interface{}) error
Count() (n int64, err error)
Distinct(key string, result interface{}) error
Cursor() CursorI
}
QueryI Query interface
type ReadPref ¶ added in v0.6.0
type ReadPref struct {
// MaxStaleness is the maximum amount of time to allow a server to be considered eligible for selection.
// Supported from version 3.4.
MaxStalenessMS int64 `json:"maxStalenessMS"`
// indicates the user's preference on reads.
// PrimaryMode as default
Mode readpref.Mode `json:"mode"`
}
ReadPref determines which servers are considered suitable for read operations.
type Session ¶ added in v0.6.0
type Session struct {
// contains filtered or unexported fields
}
Session is an struct that represents a MongoDB logical session
func (*Session) AbortTransaction ¶ added in v0.6.0
AbortTransaction aborts the active transaction for this session. This method will return an error if there is no active transaction for this session or the transaction has been committed or aborted.
func (*Session) EndSession ¶ added in v0.6.0
EndSession will abort any existing transactions and close the session.
func (*Session) StartTransaction ¶ added in v0.6.0
func (s *Session) StartTransaction(ctx context.Context, cb func(sessCtx context.Context) (interface{}, error)) (interface{}, error)
StartTransaction starts transaction precondition: - version of mongoDB server >= v4.0 - Topology of mongoDB server is not Single At the same time, please pay attention to the following
- make sure all operations in callback use the sessCtx as context parameter
- Dont forget to call EndSession if session is not used anymore
- if operations in callback takes more than(include equal) 120s, the operations will not take effect,
- if operation in callback return qmgo.ErrTransactionRetry, the whole transaction will retry, so this transaction must be idempotent
- if operations in callback return qmgo.ErrTransactionNotSupported,
- If the ctx parameter already has a Session attached to it, it will be replaced by this session.
type UpdateResult ¶
type UpdateResult struct {
MatchedCount int64 // The number of documents matched by the filter.
ModifiedCount int64 // The number of documents modified by the operation.
UpsertedCount int64 // The number of documents upserted by the operation.
UpsertedID interface{} // The _id field of the upserted document, or nil if no upsert was done.
}
UpdateResult is the result type returned from UpdateOne, UpdateMany, and ReplaceOne operations.
