package mgodb import ( "context" "eta/eta_forum_hub/utils" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" "time" ) func GetEdbDataCalculateByEdbCode(edbCode string) (items []*EdbDataBase, err error) { findOptions := options.Find() db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) filter := bson.D{{"edb_code", edbCode}} ctx := context.TODO() cur, err := db.Find(filter, findOptions) if err != nil { return } // Close the cursor once finished defer cur.Close(ctx) for cur.Next(ctx) { // create a value into which the single document can be decoded var elem EdbDataBase err = cur.Decode(&elem) if err != nil { return } elem.DataTime = elem.DataTime.In(time.Local) elem.CreateTime = elem.CreateTime.In(time.Local) elem.ModifyTime = elem.ModifyTime.In(time.Local) items = append(items, &elem) } if err = cur.Err(); err != nil { return } return } func InsertEdbCalculateDataBatch(items []interface{}) (err error) { db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.InsertMany(items) if err != nil { return } return } func ModifyEdbCalculateDataEdbInfoId(edbInfoId int64, edbCode string) (err error) { filter := bson.D{{"edb_code", edbCode}} update := bson.D{{"$set", bson.D{{"edb_info_id", edbInfoId}, {"modify_time", time.Now()}}}} db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.UpdateMany(filter, update) if err != nil { return } return } // 删除 func DeleteEdbInfoCalculateDataByEdbInfoId(edbInfoId int) (err error) { filter := bson.D{{"edb_info_id", edbInfoId}} db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.DeleteMany(filter) return } // 更新指标的值 func ModifyValueEdbCalculateDataValue(edbDataId primitive.ObjectID, value float64, modifyTime time.Time) (err error) { filter := bson.D{{"_id", edbDataId}} update := bson.D{{"$set", bson.D{{"value", value}, {"modify_time", modifyTime}}}} db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.UpdateOne(filter, update) return } func DeleteEdbCalculateDataByEdbCodeAndDateList(edbCode string, dataTime []time.Time) (err error) { filter := bson.D{{"edb_code", edbCode}, {"data_time", bson.D{{"$in", dataTime}}}} db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.DeleteMany(filter) return } func DeleteEdbCalculateDataByEdbInfoIdAndDateList(edbInfoId int, dataTime []time.Time) (err error) { filter := bson.D{{"edb_info_id", edbInfoId}, {"data_time", bson.D{{"$in", dataTime}}}} db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) _, err = db.DeleteMany(filter) return } // GetEdbCalculateDataList 获取指标的数据(日期正序返回) func GetEdbCalculateDataList(endInfoId int, startDate, endDate time.Time) (list []*EdbDataBase, err error) { findOptions := options.Find() findOptions.SetSort(bson.D{{"data_time", 1}}) db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli) filter := bson.D{{"edb_info_id", endInfoId}} if !startDate.IsZero() { filter = append(filter, bson.E{"data_time", bson.M{"$gte": startDate}}) } if !endDate.IsZero() { filter = append(filter, bson.E{"data_time", bson.M{"$lte": endDate}}) } ctx := context.TODO() //fmt.Printf("edb_info_id %d, start find %v\n", endInfoId, time.Now()) cur, err := db.Find(filter, findOptions) if err != nil { return } //fmt.Printf("end find %v\n", time.Now()) // Close the cursor once finished defer cur.Close(ctx) //fmt.Printf("start cur.Next %v\n", time.Now()) for cur.Next(ctx) { // create a value into which the single document can be decoded var elem EdbDataBase err = cur.Decode(&elem) if err != nil { return } elem.DataTime = elem.DataTime.In(time.Local) elem.CreateTime = elem.CreateTime.In(time.Local) elem.ModifyTime = elem.ModifyTime.In(time.Local) list = append(list, &elem) } //fmt.Printf("end cur.Next %v\n", time.Now()) if err = cur.Err(); err != nil { return } return }