Как декодировать данные mongodb в структуру - PullRequest
0 голосов
/ 14 января 2020

Go Модель:

package models

import (
    "time"
    "go.mongodb.org/mongo-driver/bson/primitive"
)

// News : News Model
type News struct {
    ID         primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
    Host       string             `json:"host,omitempty" bson:"host,omitempty"`
    Category   string             `json:"category,omitempty" bson:"category,omitempty"`
    Headline   string             `json:"headline,omitempty" bson:"headline,omitempty"`
    Image      string             `json:"image,omitempty" bson:"image,omitempty"`
    URL        string             `json:"url,omitempty" bson:"url,omitempty"`
    Date       string             `json:"date,omitempty" bson:"date,omitempty"`
    ClickCount int64              `json:"clickCount,omitempty" bson:"clickCount,omitempty"`
    Archived   bool               `json:"archived,omitempty" bson:"archived,omitempty"`
    CreatedAt  time.Time          `json:"createdAt,omitempty" bson:"createdAt,omitempty"`
}

MongoDB Данные, которые у меня есть:

{
    "_id" : ObjectId("5e1d58f6fad87c735bbca592"),
    "createdAt" : ISODate("2020-01-14T11:30:22.481Z"),
    "clickCount" : 0,
    "archived" : false,
    "host" : "timesofindia",
    "category" : "sports",
    "headline" : "Caroline Wozniacki pulls out of Kooyong Classic",
    "url" : "https://timesofindia.indiatimes.com/sports/tennis/top-stories/caroline-wozniacki-pulls-out-of-kooyong-classic/articleshow/73238147.cms",
    "image" : "https://timesofindia.indiatimes.com/thumb/msid-73238147,width-400,resizemode-4/73238147.jpg",
    "date" : "14 Jan 2020, 0958 hrs IST"
}

Мой код конечной точки API:

func AllNews(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("content-type", "application/json")

    collection := config.Client.Database("newspaper").Collection("news")
    ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)

    var allNews []models.News
    var finalResponse models.FinalResponse

    cursor, e := collection.Find(ctx, bson.M{})
    if e != nil {
        w.WriteHeader(http.StatusInternalServerError)
        w.Write([]byte(`{ "message": "` + e.Error() + `" }`))
        return
    }
    defer cursor.Close(ctx)

    for cursor.Next(ctx) {
        var news models.News
        cursor.Decode(&news)
        allNews = append(allNews, news)
    }

    finalResponse.Status = "success"
    finalResponse.Body = allNews

    json.NewEncoder(w).Encode(finalResponse)
}

Испытание, которое я Обращаюсь прямо сейчас в выходной, не вижу "clickCount" и "заархивирован".

Вывод:

{
    "status": "success",
    "body": [
        {
            "_id": "5e1d58f6fad87c735bbca588",
            "host": "timesofindia",
            "category": "business",
            "headline": "Bandhan Bank all set to announce its Q3 results today",
            "image": "https://timesofindia.indiatimes.com/thumb/msid-73239715,width-400,resizemode-4/73239715.jpg",
            "url": "https://timesofindia.indiatimes.com/business/india-business/bandhan-bank-all-set-to-announce-its-q3-results-today/articleshow/73239715.cms",
            "date": "14 Jan 2020, 1111 hrs IST",
            "createdAt": "2020-01-14T11:30:22.442Z"
        }
    ]
}

Я попытался изменить типы данных на int32 и строку в обоих полях, но они все еще не работали. Если я изменю тип данных этих двух полей, то в «теле» вывода я вижу только «id» и «creationAt». Дайте мне знать, если нужны дополнительные данные.

1 Ответ

1 голос
/ 14 января 2020

Вы должны удалить тег clickCount и archived JSON omitempty

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