如何构建和传递bson文档 - Go lang?

时间:2014-04-08 07:14:14

标签: mongodb go

我在项目中使用Go和mongoDB,而mgo则用于连接MongoDB

我有以下文件,这是插入MongoDB

 {
     "_id" : ObjectId("53439d6b89e4d7ca240668e5"),
     "balanceamount" : 3,
     "type" : "reg",
     "authentication" : {
       "authmode" : "10",
       "authval" : "sd",
       "recovery" : {
          "mobile" : "sdfsd",
          "email" : "sds@gmail.com"
        }
      },
     "stamps" : {
        "in" : "x",
        "up" : "y"
     }
  }

我已经创建了如上所述的BSON文档。

我有两个包

  1. account.go

  2. dbEngine.go

  3. account.go 用于创建BSON文档并将BSON文档发送到dbEngine.go

    dbEngine.go 用于建立与MongoDB的连接并插入文档。 将BSON文件传递给dbEngine.go

    dbEngine.Insert(bsonDocument);

    在dbEngine.go中我有方法

    func Insert(document interface{}){
     //stuff
    }
    
      

    错误:恐慌:无法将接口{}编组为BSON文档。

    接口{}是否不用于BSON文档。

    我是Go的新手。任何建议或帮助都将不胜感激

2 个答案:

答案 0 :(得分:2)

mgo驱动程序使用labix.org/v2/mgo/bson程序包来处理BSON编码/解码。在大多数情况下,此包是以标准库encoding/json包为模型建立的。

因此,您可以使用结构和数组来表示对象。例如,

type Document struct {
    Id bson.ObjectId `bson:"_id"`
    BalanceAmount int `bson:"balanceamount"`
    Type string `bson:"type"`
    Authentication Authentication `bson:"authentication"`
    Stamps Stamps `bson:"stamps"`
}
type Authentication struct {
    ...
}
type Stamps struct {
    ...
}

您现在可以创建此类型的值以传递给mgo

答案 1 :(得分:1)

您不需要自己生成BSON文档 让我们在account.go中说你将有一个帐户结构:

type Account struct {
  Id bson.ObjectId `bson:"_id"` // import "labix.org/v2/mgo/bson"
  BalanceAmount int
  // Other field
}

然后在dbEngine.go中插入函数:

func Insert(document interface{}){
  session, err := mgo.Dial("localhost")
  // check error
  c := session.DB("db_name").C("collection_name")
  err := c.Insert(document)
}

然后,在您的应用中的某些位置:

acc := Account{}
acc.Id = bson.NewObjectId()
acc.BalanceAmount = 3

dbEngine.Insert(&acc);