76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
package dao
|
||
|
||
import (
|
||
"context"
|
||
|
||
commonMongo "gitea.com/red-future/common/db/mongo"
|
||
"go.mongodb.org/mongo-driver/v2/bson"
|
||
)
|
||
|
||
// MongoDAO MongoDB原生查询(不需要token验证)
|
||
var MongoDAO = new(mongoDAO)
|
||
|
||
type mongoDAO struct{}
|
||
|
||
// FindOne 原生查询单条记录(不需要token验证)
|
||
// 未找到记录时返回 nil error,调用方需检查 result 是否为零值
|
||
func (m *mongoDAO) FindOne(ctx context.Context, filter bson.M, result interface{}, collectionName string) error {
|
||
db := commonMongo.GetDB()
|
||
collection := db.Collection(collectionName)
|
||
|
||
err := collection.FindOne(ctx, filter).Decode(result)
|
||
if err != nil {
|
||
if err.Error() == "mongo: no documents in result" {
|
||
return nil // 未找到记录,返回nil而不是错误
|
||
}
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// InsertOne 原生插入单条记录(不需要token验证)
|
||
func (m *mongoDAO) InsertOne(ctx context.Context, document interface{}, collectionName string) (interface{}, error) {
|
||
db := commonMongo.GetDB()
|
||
collection := db.Collection(collectionName)
|
||
|
||
result, err := collection.InsertOne(ctx, document)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return result.InsertedID, nil
|
||
}
|
||
|
||
// UpdateOne 原生更新单条记录(不需要token验证)
|
||
// 返回 matchedCount(匹配到的记录数)和 modifiedCount(实际修改的记录数)
|
||
func (m *mongoDAO) UpdateOne(ctx context.Context, filter bson.M, update bson.M, collectionName string) (matchedCount int64, modifiedCount int64, err error) {
|
||
db := commonMongo.GetDB()
|
||
collection := db.Collection(collectionName)
|
||
|
||
result, err := collection.UpdateOne(ctx, filter, update)
|
||
if err != nil {
|
||
return 0, 0, err
|
||
}
|
||
return result.MatchedCount, result.ModifiedCount, nil
|
||
}
|
||
|
||
// UpdateMany 原生批量更新记录(不需要token验证)
|
||
func (m *mongoDAO) UpdateMany(ctx context.Context, filter bson.M, update bson.M, collectionName string) (matchedCount int64, modifiedCount int64, err error) {
|
||
db := commonMongo.GetDB()
|
||
collection := db.Collection(collectionName)
|
||
|
||
result, err := collection.UpdateMany(ctx, filter, update)
|
||
if err != nil {
|
||
return 0, 0, err
|
||
}
|
||
return result.MatchedCount, result.ModifiedCount, nil
|
||
}
|
||
|
||
// Delete 原生删除记录(不需要token验证,用于回滚操作)
|
||
func (m *mongoDAO) Delete(ctx context.Context, filter bson.M, collectionName string) error {
|
||
db := commonMongo.GetDB()
|
||
collection := db.Collection(collectionName)
|
||
|
||
_, err := collection.DeleteOne(ctx, filter)
|
||
return err
|
||
}
|