112 lines
2.1 KiB
Go
112 lines
2.1 KiB
Go
package structful
|
|
|
|
import (
|
|
"log"
|
|
"context"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/mongo/options"
|
|
mongov2 "go.mongodb.org/mongo-driver/v2/mongo"
|
|
|
|
"git.gsuntres.com/general/mongo"
|
|
)
|
|
|
|
type MongoAdaptor struct {
|
|
IAdaptor
|
|
|
|
sysDb string
|
|
|
|
name string
|
|
}
|
|
|
|
func CreateMongoAdaptor(sysDb string, name string) *MongoAdaptor {
|
|
return &MongoAdaptor{
|
|
sysDb: sysDb,
|
|
name: name,
|
|
}
|
|
}
|
|
|
|
func (a *MongoAdaptor) Save(data map[string]any) error {
|
|
client := mongo.GetMongoClient()
|
|
|
|
collection := client.GetCollection(a.GetDb(), a.GetName())
|
|
|
|
res, err := collection.InsertOne(context.Background(), data)
|
|
if err != nil {
|
|
log.Fatalf("failed to insert %+v", err)
|
|
}
|
|
|
|
log.Printf("Inserted %+v", res)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *MongoAdaptor) CheckHash(hash string) bool {
|
|
client := mongo.GetMongoClient()
|
|
|
|
collection := client.GetCollection(a.GetDb(), a.GetName())
|
|
|
|
opts := options.Find()
|
|
|
|
filter := map[string]any{ "_hash": hash }
|
|
cursor, err := collection.Find(context.Background(), filter, opts)
|
|
if err != nil {
|
|
log.Printf("ERROR %v", err)
|
|
|
|
return true
|
|
}
|
|
|
|
return cursor.Next(context.Background())
|
|
}
|
|
|
|
func (a *MongoAdaptor) GetWithFilter(filter map[string]any) ([]map[string]any, error) {
|
|
client := mongo.GetMongoClient()
|
|
|
|
collection := client.GetCollection(a.GetDb(), a.GetName())
|
|
|
|
opts := options.Find()
|
|
|
|
var err error
|
|
var cursor *mongov2.Cursor
|
|
cursor, err = collection.Find(context.Background(), filter, opts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
results := make([]map[string]any, 0)
|
|
if err = cursor.All(context.TODO(), &results); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return results, nil
|
|
}
|
|
|
|
func (a *MongoAdaptor) List() ([]map[string]any, error) {
|
|
client := mongo.GetMongoClient()
|
|
|
|
collection := client.GetCollection(a.GetDb(), a.GetName())
|
|
|
|
opts := options.Find()
|
|
|
|
var err error
|
|
var cursor *mongov2.Cursor
|
|
cursor, err = collection.Find(context.Background(), nil, opts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
results := make([]map[string]any, 0)
|
|
if err = cursor.All(context.TODO(), &results); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return results, nil
|
|
}
|
|
|
|
func (a *MongoAdaptor) GetDb() string {
|
|
return a.sysDb
|
|
}
|
|
|
|
func (a *MongoAdaptor) GetName() string {
|
|
return a.name
|
|
}
|