首页 > 后端开发 > Golang > 如何使用 Go 的 Mgo 定义 MongoDB 文档中的默认日期?

如何使用 Go 的 Mgo 定义 MongoDB 文档中的默认日期?

Mary-Kate Olsen
发布: 2024-11-22 17:03:53
原创
1050 人浏览过

How to Define Default Dates in MongoDB Documents Using Go's Mgo?

使用 Go 的 Mgo 定义 Mongo 文档中的默认日期

在 MongoDB 中,为文档字段定义默认时间戳是很常见的。然而,在 Go with Mgo 中,没有直接的方法来设置字段的默认值。

具有默认值的自定义构造函数

一种方法是创建一个填充默认值的自定义构造函数:

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}
登录后复制

这确保使用此构造函数创建的每个新 User 结构都将具有默认的 CreatedAt

自定义 GetBSON Marshaler

另一个选项是使用 BSON 的 bson.Getter 接口实现自定义序列化逻辑:

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}
登录后复制

将 User 编组到 BSON 时,此GetBSON 函数将被调用,并用当前时间填充 CreatedAt 字段(如果还没有)

注意事项

请注意,无论使用哪种方法,即使更新现有文档,CreatedAt 字段也会被当前时间覆盖。为了避免这种情况,您可以在 GetBSON 中添加一个检查,以仅在字段为零值时设置该字段。

此外,自定义封送处理方法要求您为包含 time.Time 的任何类型实现 bson.Getter具有默认值的字段。

以上是如何使用 Go 的 Mgo 定义 MongoDB 文档中的默认日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板