Golang用一个结构的特殊字符键解码BSON

时间:2017-07-09 03:59:18

标签: go bson

我有一个名为Person的Golang结构,其中所有属性都必须导出:

type Person struct {
    Id         string
    Name       string 
}

现在我需要将MongoDB BSON响应编码为此Person结构。 BSON看起来像:

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

用于编码BSON的Golang代码是:

    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,则不会将其导出。
  3. 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用json标记 -

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

答案 1 :(得分: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
}

它有效!