Почему добавляются перезаписанные субэлементы? - PullRequest
0 голосов
/ 28 сентября 2019

Я создаю эту структуру:

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"`

}

Затем из Монго я получаю все данные, которые мне нужны. Проблема в том, что когда я пытаюсь добавить каждый элемент, языкиперезапись.

Вот приложение:

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 Ответ

1 голос
/ 28 сентября 2019

В каждой итерации курсора вы повторно используете один и тот же блок памяти с & в предварительно объявленном elem, по существу перезаписывая данные, декодированные в предыдущей итерации.Вместо этого, внутри цикла, выделите новый элемент для каждой записи в БД.

Например:

var elements []models.Country

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

    elements = append(elements, elem)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...