2 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
3 changed files with 27 additions and 7 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
} }
@@ -36,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