为什么追加覆盖子元素?

时间:2019-09-28 12:14:18

标签: go

我创建此结构:

type Country struct {
Id              interface{} `bson:"_id,omitempty"`
Languages       []string    `json:"languages"`
Country         string      `json:"country"`
Country_id      int         `json:"country_id"`
Capital         string      `json:"capital"`
Currency_name   string      `json:"currency_name"`
Currency_symbol string      `json:"currency_symbol"`
Currency_code   string      `json:"currency_code"`
Iso             string      `json:"iso"`

}

然后从Mongo中获取了我需要的所有数据。问题是当我尝试附加每个元素时,语言被覆盖了。

这是附录:

func GetAllCountries() []models.Country { 
options := options.Find() options.SetLimit(4)

cur, err := db.Collection(COLLCOUNTRIES).Find(context.Background(), bson.D{}, options)

if err != nil {
    log.Fatal(err)
}
var elements []models.Country
var elem models.Country
// Get the next result from the cursor
for cur.Next(context.Background()) {    
    err := cur.Decode(&elem)
            if err != nil {
        log.Fatal(err)
    }

    elements = append(elements, elem)
}
if err := cur.Err(); err != nil {
    log.Fatal(err)
}
cur.Close(context.Background())

return elements

}

结果是这样的:

-追加前的元素-

 {ObjectID("5d7f6b2b57d5104f58e53d2b") [ar-AE fa en hi ur] United Arab Emirates 290557 Abu Dhabi Dirham د.إ AED AE}

-追加前的元素-

{ObjectID("5d7f6b2b57d5104f58e53d2c") [fa-AF ps uz-AF tk] Afghanistan 1149361 Kabul Afghani ؋ AFN AF}

-所有结果-

[{ObjectID("5d7f6b2b57d5104f58e53d2b") [fa-AF ps uz-AF tk ur] United Arab Emirates 290557 Abu Dhabi Dirham د.إ AED AE} {ObjectID("5d7f6b2b57d5104f58e53d2c") [fa-AF ps uz-AF tk] Afghanistan 1149361 Kabul Afghani ؋ AFN AF}]

1 个答案:

答案 0 :(得分:1)

在光标的每次迭代中,您都在预先声明的optional($cartItem->options)->has('type') ? $cartItem->options->type : '' 上使用&重用相同的内存块,实质上覆盖了先前迭代中解码的数据。相反,在循环内部,为数据库中的每个记录分配一个新的elem。

例如:

elem