猿问

如何将 json 字符串插入 MongoDB?

我有一个 json 字符串。像这样:


"{"http_requests":[{"http_requests":{"code":"400","method":"PUT","value":89}},{"http_requests":{"code":"200","method":"PUT","value":45}}]}"


我想将这个 json 插入到 mongodb 中。但是我的代码有错误。错误是“无法将类型字符串转换为 BSON 文档:WriteString 只能在位于元素或值但位于 TopLevel 上时写入”


func insertJson(json_value string) {

   client, err := mongo.NewClient(options.Client().ApplyURI("mongodb+srv://abc:123@cluster0.wrzj3zo.mongodb.net/?retryWrites=true&w=majority"))

   if err != nil {

      log.Fatal(err)

   }

   ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)

   err = client.Connect(ctx)

   if err != nil {

      log.Fatal(err)

   }

   defer client.Disconnect(ctx)


   myDatabase := client.Database("my_db")

   myCollection := myDatabase.Collection("my_collection")

   myResult, err := myCollection.InsertOne(ctx, json_value)

   if err != nil {

      log.Fatal(err)

   }

   fmt.Println(myResult.InsertedID)

}

如何将此 json 字符串插入 mongodb?


收到一只叮咚
浏览 115回答 2
2回答

慕勒3428872

首先要做的是:在 之后添加一个 ping 以检查连接是否成功defer client.Disconnect(ctx)。if err = client.Ping(ctx, readpref.Primary()); err != nil {    log.Fatalf("ping failed: %v", err)}如果这没有引发错误,您可以按照stackoverflow 中的说明解组 JSON 字符串:如何在 golang 中将 json 对象数组插入到 mongodb 中。但是,在这种情况下,使用interface{}instead of slice 如下:var v interface{}if err := json.Unmarshal([]byte(json_value), &v); err != nil {    log.Fatal(err)}传递v给InsertOne。注意:这是解决问题的一种方法。但是,推荐的解决方法是将 JSON 解组为带有 json 和 bson 标记的结构,并将结构实例传递给InsertOne.

蝴蝶不菲

insertOne() 方法具有以下语法:db.collection.insertOne(&nbsp; &nbsp;<document>,&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; writeConcern: <document> (optional)&nbsp; &nbsp;})你所要做的就是myCollection.insertOne(json_metrics)
随时随地看视频慕课网APP

相关分类

Go
我要回答