首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Go结构中的数组字段在插入mongoDB数据库时默认为null?

为什么Go结构中的数组字段在插入mongoDB数据库时默认为null?
EN

Stack Overflow用户
提问于 2022-06-23 03:22:36
回答 1查看 196关注 0票数 0

因此,在向mongoDB中插入模型时,我遇到了一些意想不到的行为。当我通过Postman将空正文发送到服务器并将其插入数据库时,返回给Postman的结果将namenumber默认为它们的预期默认值0"",但对于data,它不是默认为空数组,而是默认为null,尽管在Go控制台插入之前和之后打印出来的值不是零,而是空数组。插入前将data字段分配为空[]int{}解决了这个问题,手动从Postman发送空数组作为数据字段也是如此,但我很好奇是否有其他方法可以保证数组字段默认为[],而不是null

这是我的模型:

代码语言:javascript
复制
type Test struct{
    Name string `json:"name"   bson:"name"`
    Number int  `json:"number" bson:"number"`
    Data []int  `json:"data"   bson:"data"`
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-28 06:35:30

实现bson.Marshaler,在保存值时将调用MarshalBSON()函数

代码语言:javascript
复制
package main

import (
    "log"

    "go.mongodb.org/mongo-driver/bson"
)

type Test struct {
    Data []int `json:"data" bson:"data"`
}

func (t *Test) MarshalBSON() ([]byte, error) {
    if t.Data == nil {
        log.Println("t.Data is nil")
        t.Data = make([]int, 0)
    }

    type my Test
    return bson.Marshal((*my)(t))
}

func main() {
    h := Test{}
    data, _ := bson.Marshal(&h)
    log.Print(bson.Raw(data))
}

// output: 
// 2009/11/10 23:00:00 t.Data is nil
// 2009/11/10 23:00:00 {"data": []}

演示go游乐场链接:https://go.dev/play/p/1WlO_44hnco

此外,您还可以检查以下链接:Autofill created_at and updated_at in golang struct while pushing into mongodb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72724175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档