如何在golang中进行通用功能查询以进行更新

时间:2018-10-30 14:08:04

标签: go

假设有一个结构,并且我将该结构保存到数据库mongodb中。例如:-

type Booking struct {
  Id                          int                 `json:"_id,omitempty" bson:"_id,omitempty"`
  Uid                         int                 `json:"uid,omitempty" bson:"uid,omitempty"`
  IndustryId                  int                 `json:"industry_id,omitempty" bson:"industry_id,omitempty"`
  PricingParameter []BookingParams `json:"pricing_parameter,omitempty" bson:"pricing_parameter,omitempty"`
  AreaParameter    BookingParams   `json:"area_parameter,omitempty" bson:"area_parameter,omitempty"`
  PartialCleaning  []BookingParams `json:"partial_cleaning,omitempty" bson:"partial_cleaning,omitempty"`
  Extras           []BookingParams `json:"extras" bson:"extras"`
}

type BookingParams struct {
  Id                  int    `json:"id" bson:"id,omitempty"`
  Name                string `json:"name,omitempty" bson:"name,omitempty"`
  Quantity            int    `json:"quantity,omitempty" bson:"quantity,omitempty"`
}

此预订结构正在保存在数据库中。假设有10个预订中包含extraspricing_parameters字段,那么当我更新这两个字段中的任何一个值时,我的五个预订将通过使用一个函数进行更新。现在,我使用以下功能:-

func (MerchantDb *MerchantDatabase) UpdateBulkBookingsDb(Id int, updator map[string]interface{}) (err error) {
   condition := bson.M{
    "status":    bson.M{"$in": []int{0, 1, 6, 7, 8}},
    "extras.id": Id}
  fmt.Println(bson.M{updator["field"].(string): updator["value"]})
  fmt.Println(condition)
  _, err = MerchantDb.DbUpdateAll(config.BookingsCollection, condition, bson.M{"$set": bson.M{updator["field"].(string): updator["value"]}})
  fmt.Println(err)
  return err
} 

Controller.go

func SaveExtra(c *gin.Context) {
  var extraData models.Extras
  var err error
  dataErr := json.NewDecoder(c.Request.Body).Decode(&extraData)
  if dataErr != nil {
    GetErrResponse(c, config.DataFormatErrMsg, dataErr)
    return
  }

  if extraData.Id != 0 {
    savedExtra, _ := merchantDb.GetExtraById(extraData.Id)
    err = merchantDb.UpdateExtraById(extraData.Id, extraData)
    updator := make(map[string]interface{})
    if savedExtra.TimeSA != extraData.TimeSA || savedExtra.TimeML != extraData.TimeML {
        updator["field"] = "is_length_updated"
        updator["value"] = 1
        err = merchantDb.UpdateBulkBookingsDb(extraData.Id, updator)
    }
    if savedExtra.PriceSA != extraData.PriceSA || savedExtra.PriceML != extraData.PriceML {
        updator["field"] = "is_price_updated"
        updator["value"] = 1
        err = merchantDb.UpdateBulkBookingsDb(extraData.Id, updator)
    }
    SuccessMsg = "Extra updated successfully."
  }
}

我将如何使用单个功能。请帮忙。

0 个答案:

没有答案