Home  >  Article  >  Backend Development  >  Mongodb time series / Golang -

Mongodb time series / Golang -

王林
王林forward
2024-02-11 10:18:171020browse

Mongodb 时间序列 / Golang -

php editor Zimo brings you an introduction to "Mongodb Time Series / Golang -". Mongodb is a non-relational database, while Golang is an efficient programming language. In terms of time series data processing, the combination of Mongodb and Golang can provide powerful functionality and performance. This article will introduce in detail how to use Mongodb and Golang to process time series data, including data storage, query and analysis. Whether you are a beginner or an experienced developer, this article will help you better understand and apply the advantages and techniques of Mongodb and Golang in time series data processing.

Question content

I have the following sample go code that inserts data from a rest request (gin) into mongodb, but it fails:

['timestamp' must be present and contain a valid bson utc datetime value]

Code:

func CreateDevicesReadings(c *gin.Context) {

var devicesReadings DevicesReadings
c.BindJSON(&devicesReadings)

// Connect to MongoDB
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
    c.JSON(500, gin.H{
        "message": "Internal Server Error. Could not connect to the database.",

    })
    log.Default().Println(err)
}

collection := client.Database("florly").Collection("devicesReadings")
ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)


// Set timestamp to the current time at the moment of the request
for i := 0; i < len(devicesReadings.DevicesReadings); i++ {
    devicesReadings.DevicesReadings[i].Timestamp = time.Now().UTC()
} 
_, err = collection.InsertOne(ctx, devicesReadings)
if err != nil {
    c.JSON(500, gin.H{
        "message": "Internal Server Error. Could not insert the data into the database.",
    })
    log.Default().Println(err)
} else {
    log.Default().Println("Data inserted successfully.")
}

client.Disconnect(context.Background())
}

type DeviceReadings struct {
    ID      primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
    Alias          string `json:"alias" bson:"alias"`
    Timestamp   time.Time `json:"timestamp,omitempty" bson:"timestamp"`
    SystemReadings SystemReadings `json:"systemReadings" bson:"systemReadings"`
    SensorReadings SensorReadings `json:"sensorsReadings" bson:"sensorsReadings"`
}

What did i do wrong? I think mongodb does the whole process of converting the time.time type to the type that mongodb looks for.

Solution

You call Collection.InsertOne(), which can be used to insert a single document. However, devicesReadings is part of multiple documents.

So you either have to iterate over all documents and pass them individually to Collection.InsertOne(), or use Collection.InsertMany(), using Slices of multiple documents to insert.

The above is the detailed content of Mongodb time series / Golang -. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete