diff --git a/dalmdl/coremongo/coremongo.go b/dalmdl/coremongo/coremongo.go index 4998e981a7f4feec598a213ebb1f698d00db6768..df7c48b13b07f57d6795589e7a78a1394ba7e8a9 100644 --- a/dalmdl/coremongo/coremongo.go +++ b/dalmdl/coremongo/coremongo.go @@ -515,6 +515,48 @@ func (mg *MongoDAO) PushData(selector map[string]interface{}, data interface{}) return nil } +//custom update with extra options +func (mg *MongoDAO) CustomUpdateWithOptions(selector map[string]interface{}, data interface{}, updateOps map[string]interface{}) error { + session, sessionError := GetMongoConnection(mg.hostName) + if errormdl.CheckErr(sessionError) != nil { + return errormdl.CheckErr(sessionError) + } + + if mg.hostName == "" { + mg.hostName = defaultHost + } + db, ok := config[mg.hostName] + if !ok { + return errormdl.Wrap("No_Configuration_Found_For_Host: " + mg.hostName) + } + + collection := session.Database(db.Database).Collection(mg.collectionName) + ops := options.UpdateOptions{} + resMarshal, err := json.Marshal(updateOps) + if err != nil { + return errormdl.Wrap("cannot marshal:") + } + obj := gjson.ParseBytes(resMarshal) + loggermdl.LogError(obj) + if updateOps != nil { + 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()) + } + } + + _, updateError := collection.UpdateMany(context.Background(), selector, data, &ops) + if errormdl.CheckErr1(updateError) != nil { + return errormdl.CheckErr1(updateError) + } + return nil +} + // CustomUpdate - CustomUpdate func (mg *MongoDAO) CustomUpdate(selector map[string]interface{}, data interface{}) error { session, sessionError := GetMongoConnection(mg.hostName)