我们将如何根据结果数以及计数字段输入数据?

时间:2018-07-13 06:57:10

标签: mongodb go

通过使用go api,我正在检索一个数组对象。如下所示:-

[
 {0 1 Sunday 1 21600 25200 1} 
 {0 1 Sunday 2 28800 32400 2} 
 {0 1 Sunday 3 36000 39600 1}
]

此数据将使用struct排列:-

type ProviderSpot struct {
 Id         int    `json:"_id" bson:"_id"` 
 PId         int    `json:"pid" bson:"pid"`
 Day        string `json:"day" bson:"day"`
 TimeSlug   int    `json:"time_slug" bson:"time_slug"`
 StartTime   int64  `json:"start_time" bson:"start_time"`
 EndTime        int64  `json:"end_time" bson:"end_time"`
 Count      int    `json:"count" bson:"count"`
}
type ProviderSpots []ProviderSpot

请参见在数组对象中,我在每个对象1,2,1中都有一个计数值,然后我必须存储该记录,就像那些具有count的记录将它们仅存储在available_spot中一样time表示较高的记录将仅在集合count value 1中保存一次,之后,左边的记录将保持计数值0,1,0,然后  那些count字段值大于0的记录,它们将在count value中保存具有addition_spot的次数。我正在使用的golang代码是这样的:-

func SaveProviderSpot(c *gin.Context) {
 response := ResponseController{}
 values := c.PostForm("array")
 var err error
 byt := []byte(values)
 var result models.ProviderSpots
 if err = json.Unmarshal(byt, &result); err != nil{
    fmt.Println(err)
 }
 fmt.Println(result)
 for i := 0; i < len(result); i++ {
    lastValue :=result[i].Count-1
    if lastValue != -1 {
        providerspot.PId = result[i].PId
        providerspot.Day = result[i].Day
        providerspot.TimeSlug = result[i].TimeSlug
        providerspot.StartTime = result[i].StartTime
        providerspot.EndTime  = result[i].EndTime
        providerspot.Count = result[i].Count - lastValue

        id, _ := models.GetAutoIncrementCounter(config.ProvidersSpotsCounterId, config.ProvidersSpotsCollection)
        providerspot.Id = id
        fmt.Println("Here We go now :- ", &providerspot)
        err = models.AddProviderSpot(&providerspot) 
    }
 }
}

举一些解决这个问题的例子。感谢您在此问题上的宝贵时间。

1 个答案:

答案 0 :(得分:0)

我解决了该问题的答案,但是谁能告诉我这是否适合我的代码:-

func SaveProviderSpot(c *gin.Context) {
 response := ResponseController{}
 values := c.PostForm("array")
 var err error
 byt := []byte(values)
 var result models.ProviderSpots
 if err = json.Unmarshal(byt, &result); err != nil{
    fmt.Println(err)
 }
 fmt.Println(result)
 for i := 0; i < len(result); i++ {
    for j := 1; j <= result[i].Count; j++ {
        // lastValue := result[i].Count-1
        // if lastValue != -1 {
        if j == 1{
            providerspot.PId = result[i].PId
            providerspot.Day = result[i].Day
            providerspot.TimeSlug = result[i].TimeSlug
            providerspot.StartTime = result[i].StartTime
            providerspot.EndTime  = result[i].EndTime
            providerspot.Count = 1//result[i].Count - lastValue

            id, _ := models.GetAutoIncrementCounter(config.ProvidersSpotsCounterId, config.ProvidersSpotsCollection)
            providerspot.Id = id
            fmt.Println("Here We go now :- ", &providerspot)
            err = models.AddProviderSpot(&providerspot) 
        }else{
            providerspot.PId = result[i].PId
            providerspot.Day = result[i].Day
            providerspot.TimeSlug = result[i].TimeSlug
            providerspot.StartTime = result[i].StartTime
            providerspot.EndTime  = result[i].EndTime
            providerspot.Count = 1//result[i].Count - lastValue

            id, _ := models.GetAutoIncrementCounter(config.AdditionalProviderCounterSpot, config.AdditionalProviderSpot)
            providerspot.Id = id
            err = models.AddAdditionalProviderSpot(&providerspot)
        }       
    }
 }
} 

这确实是我想要的,但是我很困惑它是否适合我。