我有这个数据模式:
"person": {
"name": "John",
"pets": [
{
"name": "Birdie"
}
]
}
这是将Person文档插入到MongoDB中的结构:
type Person struct {
Id primitive.ObjectID `bson:"_id,omitempty" json:"id"`
Name string `json:"name"`
Pets []struct {
Name string `json:"name"`
} `json:"pets"
}
当不带pets字段的JSON发送到POST Person API时,记录的MongoDB文档的pets字段设置为null。我认为这是因为go中的切片的nil值为零而不是空数组?
personPostRequest := ds.Person{}
if err := c.ShouldBindJSON(&personPostRequest); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
将宠物初始化为null很麻烦,因为在向文档中添加宠物时我无法使用addToSet:
// Will render the error Cannot apply $addToSet to non-array field.
// Field named 'pets' has non-array type null
err = collection.FindOneAndUpdate(
ctx,
bson.M{"_id": personId},
bson.M{
"$addToSet": bson.M{
"pets": bson.M{"$each": pets},
},
},
&opt,
)
我可以通过向pets添加结构标签bson:,omitempty
来解决此问题,但是我想探索在MongoDB中可以将pet初始化为空数组的解决方案。
我该如何在Go中执行此操作?我正在使用Go gin框架。谢谢