如何将带有 nil 字段的结构插入 mongo?
How to insert a struct with nil field to mongo?
我正在尝试向 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
切片 == 零长度切片,但 nil
指向切片的指针 不是。
我正在尝试向 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
切片 == 零长度切片,但 nil
指向切片的指针 不是。