diff --git a/dalmdl/coremongo/coremongo.go b/dalmdl/coremongo/coremongo.go index 4998e981a7f4feec598a213ebb1f698d00db6768..b8dfa2a1723041c66930a51f287b96afed743105 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) }