|
@@ -91,7 +91,6 @@ func (b *Bluk) Run() (*mongo.BulkWriteResult, error) {
|
|
return b.ms.M.C.Database(b.ms.db).Collection(b.ms.coll).BulkWrite(b.ms.M.Ctx, b.writes)
|
|
return b.ms.M.C.Database(b.ms.db).Collection(b.ms.coll).BulkWrite(b.ms.M.Ctx, b.writes)
|
|
}
|
|
}
|
|
|
|
|
|
-//
|
|
|
|
type MgoIter struct {
|
|
type MgoIter struct {
|
|
Cursor *mongo.Cursor
|
|
Cursor *mongo.Cursor
|
|
Ctx context.Context
|
|
Ctx context.Context
|
|
@@ -138,7 +137,6 @@ func (mt *MgoIter) Next(result interface{}) bool {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-//
|
|
|
|
type MgoSess struct {
|
|
type MgoSess struct {
|
|
db string
|
|
db string
|
|
coll string
|
|
coll string
|
|
@@ -314,6 +312,7 @@ type MongodbSim struct {
|
|
UserName string
|
|
UserName string
|
|
Password string
|
|
Password string
|
|
ReplSet string
|
|
ReplSet string
|
|
|
|
+ Direct bool
|
|
}
|
|
}
|
|
|
|
|
|
func (m *MongodbSim) GetMgoConn() *MgoSess {
|
|
func (m *MongodbSim) GetMgoConn() *MgoSess {
|
|
@@ -358,6 +357,9 @@ func (m *MongodbSim) InitPool() {
|
|
opts.SetReplicaSet(m.ReplSet)
|
|
opts.SetReplicaSet(m.ReplSet)
|
|
opts.SetDirect(false)
|
|
opts.SetDirect(false)
|
|
}
|
|
}
|
|
|
|
+ if m.Direct {
|
|
|
|
+ opts.SetDirect(true)
|
|
|
|
+ }
|
|
m.pool = make(chan bool, m.Size)
|
|
m.pool = make(chan bool, m.Size)
|
|
opts.SetMaxConnIdleTime(2 * time.Hour)
|
|
opts.SetMaxConnIdleTime(2 * time.Hour)
|
|
m.Ctx, _ = context.WithTimeout(context.Background(), 99999*time.Hour)
|
|
m.Ctx, _ = context.WithTimeout(context.Background(), 99999*time.Hour)
|
|
@@ -377,7 +379,7 @@ func (m *MongodbSim) Close() {
|
|
<-m.pool
|
|
<-m.pool
|
|
}
|
|
}
|
|
|
|
|
|
-//新建表并生成索引
|
|
|
|
|
|
+// 新建表并生成索引
|
|
func (m *MongodbSim) CreateIndex(c string, models []mongo.IndexModel) bool {
|
|
func (m *MongodbSim) CreateIndex(c string, models []mongo.IndexModel) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -408,7 +410,7 @@ func (m *MongodbSim) Save(c string, doc interface{}) string {
|
|
return id.Hex()
|
|
return id.Hex()
|
|
}
|
|
}
|
|
|
|
|
|
-//原_id不变
|
|
|
|
|
|
+// 原_id不变
|
|
func (m *MongodbSim) SaveByOriID(c string, doc interface{}) bool {
|
|
func (m *MongodbSim) SaveByOriID(c string, doc interface{}) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -422,7 +424,7 @@ func (m *MongodbSim) SaveByOriID(c string, doc interface{}) bool {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//批量插入
|
|
|
|
|
|
+// 批量插入
|
|
func (m *MongodbSim) SaveBulk(c string, doc ...map[string]interface{}) bool {
|
|
func (m *MongodbSim) SaveBulk(c string, doc ...map[string]interface{}) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -446,7 +448,7 @@ func (m *MongodbSim) SaveBulk(c string, doc ...map[string]interface{}) bool {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//批量插入
|
|
|
|
|
|
+// 批量插入
|
|
func (m *MongodbSim) SaveBulkInterface(c string, doc ...interface{}) bool {
|
|
func (m *MongodbSim) SaveBulkInterface(c string, doc ...interface{}) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -470,13 +472,13 @@ func (m *MongodbSim) SaveBulkInterface(c string, doc ...interface{}) bool {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//按条件统计
|
|
|
|
|
|
+// 按条件统计
|
|
func (m *MongodbSim) Count(c string, q interface{}) int {
|
|
func (m *MongodbSim) Count(c string, q interface{}) int {
|
|
r, _ := m.CountByErr(c, q)
|
|
r, _ := m.CountByErr(c, q)
|
|
return r
|
|
return r
|
|
}
|
|
}
|
|
|
|
|
|
-//统计
|
|
|
|
|
|
+// 统计
|
|
func (m *MongodbSim) CountByErr(c string, q interface{}) (int, error) {
|
|
func (m *MongodbSim) CountByErr(c string, q interface{}) (int, error) {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -496,7 +498,7 @@ func (m *MongodbSim) CountByErr(c string, q interface{}) (int, error) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-//按条件删除
|
|
|
|
|
|
+// 按条件删除
|
|
func (m *MongodbSim) Delete(c string, q interface{}) int64 {
|
|
func (m *MongodbSim) Delete(c string, q interface{}) int64 {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -508,7 +510,7 @@ func (m *MongodbSim) Delete(c string, q interface{}) int64 {
|
|
return res.DeletedCount
|
|
return res.DeletedCount
|
|
}
|
|
}
|
|
|
|
|
|
-//删除对象
|
|
|
|
|
|
+// 删除对象
|
|
func (m *MongodbSim) Del(c string, q interface{}) bool {
|
|
func (m *MongodbSim) Del(c string, q interface{}) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -521,7 +523,7 @@ func (m *MongodbSim) Del(c string, q interface{}) bool {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//按条件更新
|
|
|
|
|
|
+// 按条件更新
|
|
func (m *MongodbSim) Update(c string, q, u interface{}, upsert bool, multi bool) bool {
|
|
func (m *MongodbSim) Update(c string, q, u interface{}, upsert bool, multi bool) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -565,7 +567,7 @@ func (m *MongodbSim) UpdateById(c string, id interface{}, set interface{}) bool
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//批量更新
|
|
|
|
|
|
+// 批量更新
|
|
func (m *MongodbSim) UpdateBulkAll(db, c string, doc ...[]map[string]interface{}) bool {
|
|
func (m *MongodbSim) UpdateBulkAll(db, c string, doc ...[]map[string]interface{}) bool {
|
|
return m.NewUpdateBulk(db, c, false, false, doc...)
|
|
return m.NewUpdateBulk(db, c, false, false, doc...)
|
|
}
|
|
}
|
|
@@ -574,17 +576,17 @@ func (m *MongodbSim) UpdateBulk(c string, doc ...[]map[string]interface{}) bool
|
|
return m.UpdateBulkAll(m.DbName, c, doc...)
|
|
return m.UpdateBulkAll(m.DbName, c, doc...)
|
|
}
|
|
}
|
|
|
|
|
|
-//批量插入
|
|
|
|
|
|
+// 批量插入
|
|
func (m *MongodbSim) UpSertBulk(c string, doc ...[]map[string]interface{}) bool {
|
|
func (m *MongodbSim) UpSertBulk(c string, doc ...[]map[string]interface{}) bool {
|
|
return m.NewUpdateBulk(m.DbName, c, true, false, doc...)
|
|
return m.NewUpdateBulk(m.DbName, c, true, false, doc...)
|
|
}
|
|
}
|
|
|
|
|
|
-//批量插入
|
|
|
|
|
|
+// 批量插入
|
|
func (m *MongodbSim) UpSertMultiBulk(c string, upsert, multi bool, doc ...[]map[string]interface{}) bool {
|
|
func (m *MongodbSim) UpSertMultiBulk(c string, upsert, multi bool, doc ...[]map[string]interface{}) bool {
|
|
return m.NewUpdateBulk(m.DbName, c, upsert, multi, doc...)
|
|
return m.NewUpdateBulk(m.DbName, c, upsert, multi, doc...)
|
|
}
|
|
}
|
|
|
|
|
|
-//批量插入
|
|
|
|
|
|
+// 批量插入
|
|
func (m *MongodbSim) NewUpdateBulk(db, c string, upsert, multi bool, doc ...[]map[string]interface{}) bool {
|
|
func (m *MongodbSim) NewUpdateBulk(db, c string, upsert, multi bool, doc ...[]map[string]interface{}) bool {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -624,12 +626,12 @@ func (m *MongodbSim) NewUpdateBulk(db, c string, upsert, multi bool, doc ...[]ma
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-//查询单条对象
|
|
|
|
|
|
+// 查询单条对象
|
|
func (m *MongodbSim) FindOne(c string, query interface{}) (*map[string]interface{}, bool) {
|
|
func (m *MongodbSim) FindOne(c string, query interface{}) (*map[string]interface{}, bool) {
|
|
return m.FindOneByField(c, query, nil)
|
|
return m.FindOneByField(c, query, nil)
|
|
}
|
|
}
|
|
|
|
|
|
-//查询单条对象
|
|
|
|
|
|
+// 查询单条对象
|
|
func (m *MongodbSim) FindOneByField(c string, query interface{}, fields interface{}) (*map[string]interface{}, bool) {
|
|
func (m *MongodbSim) FindOneByField(c string, query interface{}, fields interface{}) (*map[string]interface{}, bool) {
|
|
defer catch()
|
|
defer catch()
|
|
res, ok := m.Find(c, query, nil, fields, true, -1, -1)
|
|
res, ok := m.Find(c, query, nil, fields, true, -1, -1)
|
|
@@ -639,7 +641,7 @@ func (m *MongodbSim) FindOneByField(c string, query interface{}, fields interfac
|
|
return nil, ok
|
|
return nil, ok
|
|
}
|
|
}
|
|
|
|
|
|
-//查询单条对象
|
|
|
|
|
|
+// 查询单条对象
|
|
func (m *MongodbSim) FindById(c string, query string, fields interface{}) (*map[string]interface{}, bool) {
|
|
func (m *MongodbSim) FindById(c string, query string, fields interface{}) (*map[string]interface{}, bool) {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -659,7 +661,7 @@ func (m *MongodbSim) FindById(c string, query string, fields interface{}) (*map[
|
|
return &res, true
|
|
return &res, true
|
|
}
|
|
}
|
|
|
|
|
|
-//底层查询方法
|
|
|
|
|
|
+// 底层查询方法
|
|
func (m *MongodbSim) Find(c string, query interface{}, order interface{}, fields interface{}, single bool, start int, limit int) (*[]map[string]interface{}, bool) {
|
|
func (m *MongodbSim) Find(c string, query interface{}, order interface{}, fields interface{}, single bool, start int, limit int) (*[]map[string]interface{}, bool) {
|
|
defer catch()
|
|
defer catch()
|
|
m.Open()
|
|
m.Open()
|
|
@@ -698,7 +700,7 @@ func ObjToM(query interface{}) *bson.M {
|
|
return ObjToMQ(query, true)
|
|
return ObjToMQ(query, true)
|
|
}
|
|
}
|
|
|
|
|
|
-//obj(string,M)转M,查询用到
|
|
|
|
|
|
+// obj(string,M)转M,查询用到
|
|
func ObjToMQ(query interface{}, isQuery bool) *bson.M {
|
|
func ObjToMQ(query interface{}, isQuery bool) *bson.M {
|
|
data := make(bson.M)
|
|
data := make(bson.M)
|
|
defer catch()
|
|
defer catch()
|
|
@@ -762,7 +764,7 @@ func intAllDef(num interface{}, defaultNum int) int {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-//出错拦截
|
|
|
|
|
|
+// 出错拦截
|
|
func catch() {
|
|
func catch() {
|
|
if r := recover(); r != nil {
|
|
if r := recover(); r != nil {
|
|
log.Println(r)
|
|
log.Println(r)
|
|
@@ -776,7 +778,7 @@ func catch() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-//根据bsonID转string
|
|
|
|
|
|
+// 根据bsonID转string
|
|
func BsonIdToSId(uid interface{}) string {
|
|
func BsonIdToSId(uid interface{}) string {
|
|
if uid == nil {
|
|
if uid == nil {
|
|
return ""
|
|
return ""
|
|
@@ -806,7 +808,7 @@ func ToObjectIds(ids []string) []primitive.ObjectID {
|
|
return _ids
|
|
return _ids
|
|
}
|
|
}
|
|
|
|
|
|
-//自动添加更新时间
|
|
|
|
|
|
+// 自动添加更新时间
|
|
func autoUpdateTime(db, coll string, ue *bson.M) {
|
|
func autoUpdateTime(db, coll string, ue *bson.M) {
|
|
if coll == "user" {
|
|
if coll == "user" {
|
|
set := ObjToM((*ue)["$set"])
|
|
set := ObjToM((*ue)["$set"])
|