package ipdailystatmod import ( "context" "time" "videoweb/pub/mongos" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) var db *mongos.Collection func Init(ctx context.Context) { db = mongos.Shop.Coll(TN.IpDailyStat) // 唯一索引:(appId, date) indexes := []mongo.IndexModel{ { Keys: bson.D{ {Key: FN.IpDailyStat.AppId, Value: 1}, {Key: FN.IpDailyStat.Date, Value: 1}, }, Options: options.Index().SetUnique(true), }, } _, _ = db.CreateIndex(ctx, indexes) } // UpsertCount 写入或更新指定 appId 当天的 IP 去重数 func UpsertCount(ctx context.Context, appId int64, date string, count int64) error { filter := bson.M{ FN.IpDailyStat.AppId: appId, FN.IpDailyStat.Date: date, } update := bson.M{ "$set": bson.M{ FN.IpDailyStat.Count: count, FN.IpDailyStat.UpdatedAt: time.Now(), }, } _, err := db.UpsertOne(ctx, filter, update) return err } // FindCount 查询指定 appId 在某天的 IP 去重数,未找到返回 0 func FindCount(ctx context.Context, appId int64, date string) (int64, error) { filter := bson.M{ FN.IpDailyStat.AppId: appId, FN.IpDailyStat.Date: date, } var stat IpDailyStat err := db.FindOneEx(ctx, &stat, filter) if err != nil { if err == mongo.ErrNoDocuments { return 0, nil } return 0, err } return stat.Count, nil }