2017-07-09 21 views
0

我有一个Golang结构称为Person所有属性都被导出:Golang解码特殊字符键一个BSON一个struct

type Person struct { 
    Id   string 
    Name  string 
} 

现在我需要编码我的MongoDB BSON针对这一Person结构。该BSON样子:

{ 
    "_id": "ajshJSH78N", 
    "Name": "Athavan Kanapuli" 
} 

的Golang代码编码BSON是:

mongoRecord := Person{} 
    c := response.session.DB("mydb").C("users") 
    err := c.Find(bson.M{"username": Credentials.Username, "password": Credentials.Password}).One(&mongoRecord) 

问题:

  1. _id是没有得到编码成Id
  2. 如果我将Person财产更改为_Id,那么它将不会被导出。

我该如何解决这个问题?

+0

根据你的回答,这个问题是错误的:你根本不解码JSON,而是BSON。 – Flimzy

回答

1

json标签 -

type Person struct { 
    Id   string `json:"_id"` 
    Name  string // this field match with json, so mapping not need 
} 
0

我试图把一个json标签一样定义你的结构,

type Person struct { 
    Id   string `json:"_id"` 
    Name  string // this field match with json, so mapping not need 
} 

但还是没有奏效。因为Mongodb返回类型为bson.ObjectId的'_id'。因此,将Struct标记更改为bson:"_id",并将Person结构的类型从字符串更改为bson.ObjectId。完成的更改如下,

type Person struct { 
    Id   bson.ObjectId `bson:"_id"` 
    Name  string 
    UserName string 
    IsAdmin bool 
    IsApprover bool 
} 

它的工作原理!

+0

如果'bson'标签有效,那是因为你根本不解码JSON。 – Flimzy