go - 如何将带有 nil 字段的结构插入 mongo?

标签 go struct mgo

我正在尝试向 mongo 插入一个结构。首先,我从 API 获取数据作为 JSON,并将数据分配给结构。有些字段可能为零。之后我将结构插入到 mongoDB 中。所以我得到的问题是,当插入时,所有字段都被初始化。例如我有一个这样的结构:

type VirtualMachine struct {
VirtualMachineID          utils.SUUID               `bson:"VirtualMachineID"`
Cdroms                    []*VM.VirtualMachineCdrom `bson:"Cdroms"`
CpuAllocatedMHz           int                       `bson:"CpuAllocatedMHz"`
Name                      string                    `bson:"Name"`
}

如果我得到这样的Json数据

{
"VirtualMachineID":'16as4df663a',
"Cdroms":null,
"CpuAllocatedMHz":1666,
"Name":'VMName'
}

我把它放到mongo之后,null字段就变成了一个空数组。我需要避免这种情况。 'omitempty' 没有帮助,因为如果提供的字段恰好是空数组而不是 null,它也会跳过该字段。

一开始我以为是指针的问题,后来发现所有的数据类型都是这样。很快,如果它为 nil,mgo 会将其转换为零值。

我想我在这里遗漏了一些东西,因为如果 mgo 通过设计将所有 nil 值转换为它们的零值,那会很奇怪。

最佳答案

尝试*[]*VM.VirtualMachineCdrom(或者如果您实际上不需要将元素作为指针,则只使用*[]VM.VirtualMachineCdrom)。 nil slice == 零长度 slice ,但 nil slice 指针 不是。

关于go - 如何将带有 nil 字段的结构插入 mongo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45637267/

相关文章:

Go 中的 MongoDB 聚合查找 (mgo.v2)

go - 如何正确使用 sync.pool 进行 slice

json - Golang 嵌套结构用下划线解码

json - MongoDB 使用 bson.Raw 从查询中返回整个 JSON

c++ - 强制结构大小为 8 字节

c - 共享内存段中的链表

mongodb - 自定义 mgo upsert 操作

go - 这个函数初始化语法是什么意思?

go - 普罗米修斯自定义注册表不工作

c - 结构数组 : assignment from incompatible pointer type