首页 > 后端开发 > Golang > 如何设置 Mgo 文档中 Time.Time 字段的默认日期值?

如何设置 Mgo 文档中 Time.Time 字段的默认日期值?

Linda Hamilton
发布: 2024-11-23 02:45:29
原创
715 人浏览过

How to Set Default Date Values for Time.Time Fields in Mgo Documents?

带有 Time.Time 字段的 Mgo 文档的默认日期插入

简介

在 MongoDB 中,可以为文档字段设置默认值。这对于在文档创建期间自动填充特定值的字段非常有用,例如时间戳字段。

问题

在 Mgo(MongoDB 的 Go 驱动程序)中,没有直接的方法来定义Mongoose JavaScript 模型中字段的默认值。开发人员正在寻找一种解决方案,在创建文档时自动将日期或时间值插入到文档字段中。

解决方案

在 Mgo 中设置默认日期值有两种主要方法:

  1. 构造函数函数:

    • 创建一个类似构造函数的函数,用于设置所需的字段值,例如 CreatedAt。
    • 始终使用此函数创建新文档实例。
    • 这种方法提供了对何时设置默认值的控制,但需要手动
  2. 自定义封送处理:

    • 在自定义结构体中实现 bson.Getter 接口以在之前提供值它实际上被保存了。
    • 使用 GetBSON() 返回结构的副本设置所需的字段值(如果尚未设置)。
    • 这种方法更加自动化,但需要仔细考虑以避免潜在的堆栈溢出或意外覆盖现有值。

实现示例

对于自定义封送处理方法,这里有一个示例实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

import (

    "context"

    "time"

 

    "github.com/globalsign/mgo/bson"

)

 

type User struct {

    CreatedAt time.Time `json:"created_at" bson:"created_at"`

}

 

func (u *User) GetBSON() (interface{}, error) {

    if u.CreatedAt.IsZero() {

        u.CreatedAt = time.Now()

    }

    type my *User

    return my(u), nil

}

 

func main() {

    session, err := mgo.Dial("localhost:27017")

    if err != nil {

        panic(err)

    }

    defer session.Close()

 

    c := session.DB("mydb").C("users")

 

    // Create a new user with a default CreatedAt timestamp

    user := User{}

    err = c.Insert(user)

    if err != nil {

        panic(err)

    }

}

登录后复制

在此示例中,当新的 User 文档插入数据库时​​,CreatedAt 字段将自动设置为当前时间。这是通过重写 GetBSON() 方法以在数据库驱动程序尝试序列化对象以进行插入时提供修改后的结构值来实现的。

以上是如何设置 Mgo 文档中 Time.Time 字段的默认日期值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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