为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
泛舟湖上清波郎朗 2023-07-26 16:31:46
我正在使用官方 mongodb-go-driver 从 Go Web 服务器中的 MongoDB 图集获取数据。我正在使用 json.Marshal 转换为 json。但某些字段的所有值都变为零。package mainimport ("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))}
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

}


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信