3 Commits

Author SHA1 Message Date
3a826ac216 fixed sort via pipeline 2022-12-07 15:16:09 +01:00
ede07bb49a extended interface 2022-02-21 15:26:23 +01:00
6834a79601 ValidateObject not in interface 2022-02-14 16:01:12 +01:00
4 changed files with 28 additions and 9 deletions

View File

@@ -176,13 +176,15 @@ func (db *MgoDatabase) ReadCollection(results interface{}, filter bson.M, select
} }
if len(sort) > 0 { if len(sort) > 0 {
sortM := bson.M{} sortM := bson.D{}
for _, s := range sort { for _, s := range sort {
if strings.HasPrefix(s, "-") { if strings.HasPrefix(s, "-") {
s = s[1:] s = s[1:]
sortM[s] = -1 sortM = append(sortM, bson.DocElem{Name: s, Value: -1})
// sortM[s] = -1
} else { } else {
sortM[s] = 1 sortM = append(sortM, bson.DocElem{Name: s, Value: 1})
// sortM[s] = 1
} }
} }
// spew.Dump(sortM) // spew.Dump(sortM)

20
mgo.go
View File

@@ -36,10 +36,15 @@ func (c *MgoConnection) Close() {
} }
type MgoSession struct { type MgoSession struct {
connection *MgoConnection
session *mgo.Session session *mgo.Session
closed bool closed bool
} }
func (s *MgoSession) Connection() Connection {
return s.connection
}
func (s *MgoSession) Close() { func (s *MgoSession) Close() {
if !s.closed { if !s.closed {
s.session.Close() s.session.Close()
@@ -49,7 +54,10 @@ func (s *MgoSession) Close() {
} }
func (c *MgoConnection) NewSession() Session { func (c *MgoConnection) NewSession() Session {
s := &MgoSession{session: c.connection.Copy()} s := &MgoSession{
connection: c,
session: c.connection.Copy(),
}
runtime.SetFinalizer(s, func(s *MgoSession) { runtime.SetFinalizer(s, func(s *MgoSession) {
if !s.closed { if !s.closed {
s.Close() s.Close()
@@ -68,15 +76,23 @@ func (s *MgoSession) DB(name string) Database {
} }
type MgoCollection struct { type MgoCollection struct {
database *MgoDatabase
collection *mgo.Collection collection *mgo.Collection
} }
func (c *MgoCollection) DB() Database {
return c.database
}
func (db *MgoDatabase) Session() Session { func (db *MgoDatabase) Session() Session {
return db.session return db.session
} }
func (db *MgoDatabase) C(name string) Collection { func (db *MgoDatabase) C(name string) Collection {
return &MgoCollection{collection: db.database.C(name)} return &MgoCollection{
database: db,
collection: db.database.C(name),
}
} }
func (db *MgoDatabase) Name() string { func (db *MgoDatabase) Name() string {

View File

@@ -16,6 +16,7 @@ type Connection interface {
} }
type Session interface { type Session interface {
Connection() Connection
Close() Close()
DB(name string) Database DB(name string) Database
} }
@@ -25,7 +26,6 @@ type Database interface {
// C(name string) Collection // C(name string) Collection
Name() string Name() string
EnsureIndex(m ModelInterface, index ...Index) error EnsureIndex(m ModelInterface, index ...Index) error
ValidateObject(m ModelInterface, changes bson.M) error
ReadDocument(m ModelInterface, selector bson.M) error ReadDocument(m ModelInterface, selector bson.M) error
CreateDocument(m ModelInterface) error CreateDocument(m ModelInterface) error
ReadCollection(results interface{}, filter bson.M, selector bson.M, offset int, limit int, sort []string, pipelineModifier PipelineModifierFunction) error ReadCollection(results interface{}, filter bson.M, selector bson.M, offset int, limit int, sort []string, pipelineModifier PipelineModifierFunction) error
@@ -37,6 +37,7 @@ type Database interface {
} }
type Collection interface { type Collection interface {
DB() Database
Insert(docs ...interface{}) error Insert(docs ...interface{}) error
UpdateId(id interface{}, update interface{}) error UpdateId(id interface{}, update interface{}) error
RemoveId(id interface{}) error RemoveId(id interface{}) error

View File

@@ -6,7 +6,7 @@ import (
) )
// ValidateObject validates object via validator tag and custom method // ValidateObject validates object via validator tag and custom method
func (db *MgoDatabase) ValidateObject(m ModelInterface, changes bson.M) error { func ValidateObject(db Database, m ModelInterface, changes bson.M) error {
// first validate via struct tag // first validate via struct tag
validator := validator.New(&validator.Config{ validator := validator.New(&validator.Config{
TagName: "validator", TagName: "validator",