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

subscription.TimeoutSeconds总是包含 0 让我感到困惑,当我 确定我30在我插入到集合中的文档中时。

所有其他值都可以正常检索。

int 类型有什么问题?

4

2 回答 2

4

您是否尝试过为该字段设置“键”值?

解组

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

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

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

于 2012-08-18T01:25:46.557 回答
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"
}

编组期间 1 个键值对的一般规范是:

"[<key>][,<flag1>[,<flag2>]]"

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

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

查看Marshal GO 参考以获取更多信息。

类似地,有一些框架提供了进一步的选项来定义解析前的键。例如,在 sql 中,jinzhu github 库支持设置默认值、映射的列 id 等。

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

于 2016-06-29T11:42:43.727 回答