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

如何使用 Go 将对象数组插入 MongoDB

如何使用 Go 将对象数组插入 MongoDB

Go
当年话下 2021-09-27 17:24:42
我有来自 API 的 JSON,我想使用 mgo 包将其保存到 MongoDB。我的 JSON 如下所示:{  "something": "value"  "collection": [    { "obj1": "value" }    // ... (Variable number of objects here)  ]}为了保存这些数据,我type在 Go 应用程序中创建了一个新的,如下所示:type MyData struct {  Something string  Collection []string // This actually contains more than strings but I'll be happy if I can just get strings saved}mongoSess, err := mgo.Dial("localhost:27017")if err != nil {  panic(err)}defer mongoSess.Close()c := mongoSess.DB("mydatabase").C("mycollection")insertErr := c.Insert(&MyData{something, collection})这段代码有效,但问题是它没有在我的集合字段中保存任何应该是 JSON 对象数组的内容。什么都没有。我得到了数据库中的键,它们是正确的类型,但它们没有数据。这是 Mongo 的输出:{ "_id" : ObjectId("5520c535a236d8a9a215d096"), "something" : "value", "collection" : [ ] }谁能发现我做错了什么?我显然是 Go 的新手并且在类型方面遇到了麻烦。解决方案这里的答案对我帮助很大。我的错是没有正确解释事情,因为答案让我走上了正确的轨道,但没有直接解决问题。这是实际的解决方案。package mainimport (  "encoding/json"  "github.com/bitly/go-simplejson"  "gopkg.in/mgo.v2"  //"gopkg.in/mgo.v2/bson"  // Other packages are used as well)type MyData struct {  Something int  Collection []interface{}}func main() {    // I'm using SimpleJson for parsing JSON    collection, cerr := jsonFromExternalApi.Get("collection").Array()    if cerr != nil {      logger.Debug.Fatalln(cerr)    }    // Save response to Mongo (leaving out all the connection code)    c := mongoSess.DB("mydb").C("mycollection")    insertErr := c.Insert(&Producer{npn, licenses })}问题是 SimpleJSON 将我的 API 调用中的对象数组作为[]interface{}. 我不知道我可以简单地将结构的一部分声明为接口,因此与其只是纠正 Go 的编译器告诉我的错误,还不如让它变得比本来应该更难。来自松散类型的脚本语言,像这样的东西真的让我感到困惑,有时很难看到好处,但希望有一天这能帮助某人。
查看完整描述

2 回答

?
浮云间

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

看起来你有错误的数据结构。

insertErr := c.Insert(&MyData{something, collection})

东西 =>string和集合 =>slice

你的代码应该是这样的:

insertErr := c.Insert(&MyData{"something", []string{"obj1", "value"}})

是工作代码。

[{Something:something Collection:[obj1 value]} {Something:something Collection:[obj1 value]} {Something:something Collection:[obj1 value]} {Something:something Collection:[obj1 value]}]

如需进一步参考,mgo有很好的文档,您可以在此处找到有关运行 mongodb 查询的示例代码和详细信息。


查看完整回答
反对 回复 2021-09-27
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

在这里,您没有在 MyData 结构中为 Collection 定义正确的类型。


Collection []string    //This is what you are defining.

但是从 Json 你没有得到string array,你得到了 map[string]interface{}


这就是您没有正确填充 Mydata 结构的原因


正确的 MyData 结构将是


type MyData struct {

 Something string   

 Collection map[string]string // This actually contains more than strings but I'll be happy if I can just get strings saved 

}


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

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