From b90edfc987d59c799ffb06f988fcf16e32f31eaa Mon Sep 17 00:00:00 2001 From: prajwalp <prajwalp@mkcl.org> Date: Tue, 23 Aug 2022 12:38:40 +0530 Subject: [PATCH] #9 Added update options in custom update --- dalmdl/coremongo/coremongo.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/dalmdl/coremongo/coremongo.go b/dalmdl/coremongo/coremongo.go index 4998e98..b8dfa2a 100644 --- a/dalmdl/coremongo/coremongo.go +++ b/dalmdl/coremongo/coremongo.go @@ -186,6 +186,10 @@ func GetMongoConnection(hostName string) (*mongo.Client, error) { type MongoDAO struct { hostName string collectionName string + MetaData MetaData +} +type MetaData struct { + UpdateOps map[string]interface{} } // GetMongoDAOWithHost return mongo DAO instance @@ -515,6 +519,11 @@ func (mg *MongoDAO) PushData(selector map[string]interface{}, data interface{}) return nil } +//set update option for custom update +func (mg *MongoDAO) SetUpdateOps(updateOps map[string]interface{}) { + mg.MetaData.UpdateOps = updateOps +} + // CustomUpdate - CustomUpdate func (mg *MongoDAO) CustomUpdate(selector map[string]interface{}, data interface{}) error { session, sessionError := GetMongoConnection(mg.hostName) @@ -529,8 +538,26 @@ func (mg *MongoDAO) CustomUpdate(selector map[string]interface{}, data interface if !ok { return errormdl.Wrap("No_Configuration_Found_For_Host: " + mg.hostName) } + ops := options.UpdateOptions{} + loggermdl.LogError("In coremongo:", mg.MetaData.UpdateOps) + if mg.MetaData.UpdateOps != nil { + resMarshal, err := json.Marshal(mg.MetaData.UpdateOps) + if err != nil { + return errormdl.Wrap("cannot marshal:") + } + obj := gjson.ParseBytes(resMarshal) + if obj.Get("arrayFilter").Value() != nil { + arr := obj.Get("arrayFilter").Value().([]interface{}) + ops.SetArrayFilters(options.ArrayFilters{ + Filters: arr, + }) + } + if obj.Get("upsert").Value() != nil { + ops.SetUpsert(obj.Get("upsert").Bool()) + } + } collection := session.Database(db.Database).Collection(mg.collectionName) - _, updateError := collection.UpdateMany(context.Background(), selector, data) + _, updateError := collection.UpdateMany(context.Background(), selector, data, &ops) if errormdl.CheckErr1(updateError) != nil { return errormdl.CheckErr1(updateError) } -- GitLab