type User struct {
    ID           primitive.ObjectID `bson:"_id,omitempty"`
    CreatedAt    time.Time          `bson:"created_at"`
    UpdatedAt    time.Time          `bson:"updated_at"`
    Name         string             `bson:"name"`
}

user := User{Name: "username"}

client.Database("db").Collection("collection").InsertOne(context.Background(), user)

如何在golang的mongodb(仅限mongodb驱动程序)中使用上述代码中自动创建的_at和更新的_at?目前,它将为在创建的_和在更新的_设置零时间(0001-01-01T00:00:00.000+00:00).

推荐答案

MongoDB服务器不支持这一点.

您可以实现一个自定义封送拆收器,在其中可以根据自己的喜好更新这些字段.实现bson.Marshaler,当保存*User类型的值时,将调用MarshalBSON()函数.

这就是它的样子:

func (u *User) MarshalBSON() ([]byte, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    u.UpdatedAt = time.Now()
    
    type my User
    return bson.Marshal((*my)(u))
}

请注意,该方法具有指针接收器,因此请使用指向您的值的指针:

user := &User{Name: "username"}


c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
    // handle error
}

my类型的目的是避免堆栈溢出.

Mongodb相关问答推荐

Mongo聚合项目数组交集

Select 筛选聚合中的嵌套字段

MongoDB 按 created_at 月聚合

使用 mongo-driver/mongo 使用键/值对中的值表达式查找文档

程序可以运行,但我不断收到发送到客户端后无法设置标题,我应该忽略它吗?

MongoDB 将 JSON 字符串转换为数组[{obj1},{obj2}]的实际对象

从 kubectl exec 获取返回值到 powershell 脚本

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

如何过滤查找mongodb的结果

Mongo 删除最后的文件

如何在 Mongoose 中定义一个通用的嵌套对象

从 PHP 打印 MongoDB 日期

Mongo 重启错误 -- /var/run/mongodb/mongod.pid 存在

MongoDB 的 BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M=") 中的0是什么意思?

MongoDB 聚合 $divide 计算字段

你如何让 mongo 在远程服务器上运行?

用 BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId 在 C# 中装饰属性之间的区别

使用管道聚合的 Spring Data MongoDB 查找

Python - Pymongo 插入和更新文档

查询不等于 null 或空的地方