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

如何将 json 字符串插入 MongoDB?

如何将 json 字符串插入 MongoDB?

Go
收到一只叮咚 2023-03-07 17:14:40
我有一个 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?
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

首先要做的是:在 之后添加一个 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.


查看完整回答
反对 回复 2023-03-07
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

insertOne() 方法具有以下语法:


db.collection.insertOne(

   <document>,

   {

      writeConcern: <document> (optional)

   }

)

你所要做的就是


myCollection.insertOne(json_metrics)


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

添加回答

举报

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