Golang Ошибка демаршаллинга массива строк bong Mongodb - PullRequest
1 голос
/ 05 апреля 2020

В моей коллекции баз данных MongoDB я храню такие продукты:

{
   "_id":{
      "$oid":"5e87388e622a7a973148cf15"
   },
   "tags":[
      "foo",
      "bar",
      "baz"
   ]
}

, которые я хотел бы распаковать так:

type Product struct {
    Tags          []string           `bson:"tags" json:"tags"`
}

и когда я пытаюсь получить это

ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
client, err := mongo.Connect(ctx, options.Client().ApplyURI("correct-address"))
if err != nil {
    log.Fatal(err)
    return
}
collection := client.Database("products").Collection("products")

cursor, err := collection.Find(ctx, bson.M{})
if err != nil {
    log.Fatal(err)
    fmt.Fprint(w, err)
    return
}
defer cursor.Close(ctx)

products := []Product{}
for cursor.Next(ctx) {
    var nextOne Product
    err := cursor.Decode(&nextOne)
    if err != nil {
        log.Fatal(err)
    }
    products = append(products, nextOne)
}

Я получаю сообщение об ошибке

cannot decode document into []string

Кто-нибудь знает, что я здесь не так делаю?

========= ===== решено

Оказывается, у меня есть один документ в коллекции, который будет иметь "теги": {}

1 Ответ

1 голос
/ 08 апреля 2020

Кто-нибудь знает, что я здесь не так делаю?

Сообщение об ошибке cannot decode document into []string указывает, что вместо массива поле tags, которое вы пытаетесь декодировать это документ вместо. Вместо:

{"tags": ["foo", "bar", "baz"]}

У вас есть следующее:

{"tags": {"foo": "bar"}}

Я бы предложил изучить коллекцию, возможно, в коллекции есть несколько документов, схема которых отличается от ожидаемой.

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