我有一个 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.
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
insertOne() 方法具有以下语法:
db.collection.insertOne(
<document>,
{
writeConcern: <document> (optional)
}
)
你所要做的就是
myCollection.insertOne(json_metrics)
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消