我在项目中使用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文档。
我有两个包
account.go
dbEngine.go
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
的新手。任何建议或帮助都将不胜感激
答案 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);