Я извлекаю свои данные из атласа MongoDB на веб-сервере Go, используя официальный драйвер mongodb-go.Я использую 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))
}
func main() {
err := c.Ping(context.Background(), readpref.Primary())
if err != nil {
log.Fatal("Couldn't connect to the database", err)
} else {
log.Println("Connected!")
}
router := gin.Default()
router.GET("/data", getting)
router.Run()
}
Мой ожидаемый результат:
[{
"minute": 3,
"date": 14,
"moisture_1": 96,
"hour": 23,
"month": "02",
"year": 2019,
"humidity_1": 77.2,
"temperature_1": 22.7
}, {
"minute": 8,
"date": 14,
"moisture_1": 96,
"hour": 23,
"month": "02",
"year": 2019,
"humidity_1": 78.1,
"temperature_1": 22.8
}]
Фактический результат:
[{
"minute": 3,
"date": 14,
"moisture_1": 0,
"hour": 23,
"month": "02",
"year": 2019,
"humidity_1": 0,
"temperature_1": 0
}, {
"minute": 8,
"date": 14,
"moisture_1": 0,
"hour": 23,
"month": "02",
"year": 2019,
"humidity_1": 0,
"temperature_1": 0
}]
Значения минут, часов, даты, месяца и года являются правильными и неизменными, новсе значения влажности, влажности и температуры становятся равными нулю.