为什么我从 mongodb 获取 json 中某些字段的值全为零?

我正在使用官方 mongodb-go-driver 从 Go Web 服务器中的 MongoDB 图集获取数据。我正在使用 json.Marshal 转换为 json。但某些字段的所有值都变为零。


package main


import (

"context"

"fmt"

"log"


"github.com/gin-gonic/gin"

"go.mongodb.org/mongo-driver/bson"

"go.mongodb.org/mongo-driver/mongo"

"go.mongodb.org/mongo-driver/mongo/options"

"go.mongodb.org/mongo-driver/mongo/readpref"

)


var c = GetClient()


type PlantData struct {

Minute       int     `json:"minute"`

Date         int     `json:"date"`

Moisture1    int     `json:"moisture_1"`

Hour         int     `json:"hour"`

Month        int     `json:"month"`

Year         int     `json:"year"`

Humidity1    float64 `json:"humidity_1"`

Temperature1 float64 `json:"temperature_1"`

}


func GetClient() *mongo.Client {

    clientOptions := options.Client().ApplyURI("MY_MONGODB_URI")

    client, err := mongo.NewClient(clientOptions)

    if err != nil {

        log.Fatal(err)

    }

    err = client.Connect(context.Background())

    if err != nil {

        log.Fatal(err)

    }

    return client

}


func ReturnAllPlantsData(client *mongo.Client, filter bson.M) []*PlantData {

    var plantsdata []*PlantData

    collection := client.Database("iot").Collection("tomatos")

    cur, err := collection.Find(context.TODO(), filter)

    if err != nil {

        log.Fatal("Error on Finding all the documents", err)

    }

    for cur.Next(context.TODO()) {

        var plantdata PlantData

        err = cur.Decode(&plantdata)

        if err != nil {

            log.Fatal("Error on Decoding the document", err)

        }

        plantsdata = append(plantsdata, &plantdata)

    }

    return plantsdata

}


func getting(g *gin.Context) {  

     plantsdatas := ReturnAllPlantsData(c, bson.M{})

     ans, _ := json.Marshal(plantsdatas)

     fmt.Println(string(ans))

     c.String(200, string(ans))

}


泛舟湖上清波郎朗
浏览 137回答 1
1回答

守候你守候我

在从 MongoDB 编组或编组到 MongoDB 时必须使用bson标签。json标签用于encoding/json包,Mongo 驱动程序不使用(忽略)它们。type PlantData struct {    Minute       int     `bson:"minute"`    Date         int     `bson:"date"`    Moisture1    int     `bson:"moisture_1"`    Hour         int     `bson:"hour"`    Month        int     `bson:"month"`    Year         int     `bson:"year"`    Humidity1    float64 `bson:"humidity_1"`    Temperature1 float64 `bson:"temperature_1"`}如果bson您的结构字段中缺少标签,MongoDB 中使用的默认名称将以小写字母开头的结构字段名称,这就是为什么某些(大多数)字段匹配但不匹配的原因(它的不同之处不仅仅是大写首Moisture1字母moisture_1)。如果您还想使用encoding/json带有此结构的包,您可以提供两者:type PlantData struct {    Minute       int     `bson:"minute" json:"minute"`    Date         int     `bson:"date" json:"date"`    Moisture1    int     `bson:"moisture_1" json:"moisture_1"`    Hour         int     `bson:"hour" json:"hour"`    Month        int     `bson:"month" json:"month"`    Year         int     `bson:"year" json:"year"`    Humidity1    float64 `bson:"humidity_1" json:"humidity_1"`    Temperature1 float64 `bson:"temperature_1" json:"temperature_1"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go