wangchuanjin 4 ani în urmă
părinte
comite
78932beb0b
2 a modificat fișierele cu 62 adăugiri și 16 ștergeri
  1. 50 12
      src/mongodb/mongodb.go
  2. 12 4
      src/mongodb/mongodb_test.go

+ 50 - 12
src/mongodb/mongodb.go

@@ -41,21 +41,27 @@ func (b *Bluk) Insert(doc interface{}) {
 func (b *Bluk) Update(doc ...interface{}) {
 	write := mongo.NewUpdateOneModel()
 	write.SetFilter(doc[0])
-	write.SetUpdate(doc[1])
+	ue := ObjToM(doc[1])
+	autoUpdateTime(b.ms.db, b.ms.coll, ue)
+	write.SetUpdate(ue)
 	write.SetUpsert(false)
 	b.writes = append(b.writes, write)
 }
 func (b *Bluk) UpdateAll(doc ...interface{}) {
 	write := mongo.NewUpdateManyModel()
 	write.SetFilter(doc[0])
-	write.SetUpdate(doc[1])
+	ue := ObjToM(doc[1])
+	autoUpdateTime(b.ms.db, b.ms.coll, ue)
+	write.SetUpdate(ue)
 	write.SetUpsert(false)
 	b.writes = append(b.writes, write)
 }
 func (b *Bluk) Upsert(doc ...interface{}) {
 	write := mongo.NewUpdateOneModel()
 	write.SetFilter(doc[0])
-	write.SetUpdate(doc[1])
+	ue := ObjToM(doc[1])
+	autoUpdateTime(b.ms.db, b.ms.coll, ue)
+	write.SetUpdate(ue)
 	write.SetUpsert(true)
 	b.writes = append(b.writes, write)
 }
@@ -194,15 +200,27 @@ func (ms *MgoSess) RemoveAll(filter interface{}) (*mongo.DeleteResult, error) {
 func (ms *MgoSess) Upsert(filter, update interface{}) (*mongo.UpdateResult, error) {
 	ct := options.Update()
 	ct.SetUpsert(true)
-	return ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, filter, update, ct)
+	ue := ObjToM(update)
+	autoUpdateTime(ms.db, ms.coll, ue)
+	return ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, filter, ue, ct)
 }
 func (ms *MgoSess) UpsertId(filter, update interface{}) (*mongo.UpdateResult, error) {
 	ct := options.Update()
 	ct.SetUpsert(true)
-	return ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, map[string]interface{}{"_id": filter}, update, ct)
+	ue := ObjToM(update)
+	autoUpdateTime(ms.db, ms.coll, ue)
+	return ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, map[string]interface{}{"_id": filter}, ue, ct)
 }
 func (ms *MgoSess) UpdateId(filter, update interface{}) error {
-	_, err := ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, map[string]interface{}{"_id": filter}, update)
+	ue := ObjToM(update)
+	autoUpdateTime(ms.db, ms.coll, ue)
+	_, err := ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, map[string]interface{}{"_id": filter}, ue)
+	return err
+}
+func (ms *MgoSess) Update(filter, update interface{}) error {
+	ue := ObjToM(update)
+	autoUpdateTime(ms.db, ms.coll, ue)
+	_, err := ms.M.C.Database(ms.db).Collection(ms.coll).UpdateOne(ms.M.Ctx, filter, ue)
 	return err
 }
 func (ms *MgoSess) Count() (int64, error) {
@@ -467,14 +485,16 @@ func (m *MongodbSim) Update(c string, q, u interface{}, upsert bool, multi bool)
 		ct.SetUpsert(true)
 	}
 	coll := m.C.Database(m.DbName).Collection(c)
+	ue := ObjToM(u)
+	autoUpdateTime(m.DbName, c, ue)
 	var err error
 	if multi {
-		_, err = coll.UpdateMany(m.Ctx, ObjToM(q), ObjToM(u), ct)
+		_, err = coll.UpdateMany(m.Ctx, ObjToM(q), ue, ct)
 	} else {
-		_, err = coll.UpdateOne(m.Ctx, ObjToM(q), ObjToM(u), ct)
+		_, err = coll.UpdateOne(m.Ctx, ObjToM(q), ue, ct)
 	}
 	if err != nil {
-		log.Println("删除错误", err.Error())
+		log.Println("更新错误", err.Error())
 		return false
 	}
 	return true
@@ -489,7 +509,9 @@ func (m *MongodbSim) UpdateById(c string, id interface{}, set interface{}) bool
 	} else {
 		q["_id"] = id
 	}
-	_, err := m.C.Database(m.DbName).Collection(c).UpdateOne(m.Ctx, q, ObjToM(set))
+	ue := ObjToM(set)
+	autoUpdateTime(m.DbName, c, ue)
+	_, err := m.C.Database(m.DbName).Collection(c).UpdateOne(m.Ctx, q, ue)
 	if nil != err {
 		log.Println("UpdateByIdError", err)
 		return false
@@ -527,13 +549,17 @@ func (m *MongodbSim) NewUpdateBulk(db, c string, upsert, multi bool, doc ...[]ma
 		if multi {
 			write := mongo.NewUpdateManyModel()
 			write.SetFilter(d[0])
-			write.SetUpdate(d[1])
+			ue := ObjToM(d[1])
+			autoUpdateTime(m.DbName, c, ue)
+			write.SetUpdate(ue)
 			write.SetUpsert(upsert)
 			writes = append(writes, write)
 		} else {
 			write := mongo.NewUpdateOneModel()
 			write.SetFilter(d[0])
-			write.SetUpdate(d[1])
+			ue := ObjToM(d[1])
+			autoUpdateTime(m.DbName, c, ue)
+			write.SetUpdate(ue)
 			write.SetUpsert(upsert)
 			writes = append(writes, write)
 		}
@@ -734,3 +760,15 @@ func ToObjectIds(ids []string) []primitive.ObjectID {
 	}
 	return _ids
 }
+
+//自动添加更新时间
+func autoUpdateTime(db, coll string, ue *bson.M) {
+	if db == "qfw" && coll == "user" {
+		set := ObjToM((*ue)["$set"])
+		if *set == nil {
+			set = &bson.M{}
+		}
+		(*set)["auto_updatetime"] = time.Now().Unix()
+		(*ue)["$set"] = set
+	}
+}

+ 12 - 4
src/mongodb/mongodb_test.go

@@ -49,13 +49,21 @@ func Test_find(t *testing.T) {
 }
 func Test_update(t *testing.T) {
 	m := &MongodbSim{
-		MongodbAddr: "192.168.3.128:27090",
+		MongodbAddr: "192.168.3.128:27080",
 		Size:        5,
-		DbName:      "wcj",
-		UserName:    "admin",
-		Password:    "123456",
+		DbName:      "qfw",
+		//UserName:    "admin",
+		//Password:    "123456",
 	}
 	m.InitPool()
+	log.Println(m.Update("user", map[string]interface{}{
+		"s_phone": "15037870765",
+	}, map[string]interface{}{
+		"$unset": map[string]interface{}{
+			"s_name": "",
+		},
+	}, false, false))
+	return
 	s := [][]map[string]interface{}{
 		[]map[string]interface{}{
 			map[string]interface{}{"name": "李四111"},