Golang/mgo:无法从MongoDB文档中检索int字段的值

3
我正在查询一个包含整数值的集合,并将结果文档加载到这个结构中:
type Subscription struct {
    Id bson.ObjectId "_id,omitempty"
    Listen string
    Job string
    TimeoutSeconds int
    Data string
}


var subscription Subscription

subscriptions := subscriptionsCol.Find(bson.M{"listen": "example_channel"}).Iter()
for subscriptions.Next(&subscription) {
    log("Pending job: %s?%s (timeout: %d)\n",
            subscription.Job, 
            subscription.Data, 
            subscription.TimeoutSeconds)
}

这是phpMoAdmin向我展示的内容:
[_id] => MongoId Object (
    [$id] => 502ed8d84eaead30a1351ea7
)
[job] => partus_test_job_a
[TimeoutSeconds] => 30
[listen] => partus.test
[data] => a=1&b=9

当我确认在集合中插入的文档中有 30 时,subscription.TimeoutSeconds 总是包含0,这让我困惑不解。

其他所有值都能够成功检索。

整数类型出了什么问题?

2个回答

4

你是否尝试为该字段设置“key”值?

Unmarshal

每个导出字段的小写字段名称都用作键,但可以使用相应的字段标记更改此行为。

type Subscription struct {
    Id              bson.ObjectId    "_id,omitempty"
    Listen          string
    Job             string
    TimeoutSeconds  int     "TimeoutSeconds"
    Data            string
}

其他字段都正常工作,因为它们的小写值与Mongo集合中的字段匹配,而TimeoutSeconds使用TitleCase。发生的情况是整数字段保留其零值,因为Unmarshal无法将字段映射到它。

0

在反序列化数据时,支持多个键。以下是一些示例:

type T struct {
    A bool
    B int    "myb"
    C string "myc,omitempty"
    D string `bson:",omitempty" json:"jsonkey"`
    E int64  ",minsize"
    F int64  "myf,omitempty,minsize"
}

在编组过程中,一个键值对的一般规范是:
"[<key>][,<flag1>[,<flag2>]]"

`(...) bson:"[<key>][,<flag1>[,<flag2>]]" (...)` 

GO提供特定关键字的支持,例如bson(用于mongo键)和json用于在响应中设置json键。

有关更多信息,请查看Marshal GO Reference

同样,还有一些框架可以提供更多选项来定义在解析之前的键。例如,在sql jinzhu github库中,提供了设置默认值、列id映射等支持。

任何人都可以使用此功能并提供定制支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接