在Go中初始化MongoDB Array字段

时间:2020-09-23 03:30:41

标签: arrays mongodb go struct go-gin

我有这个数据模式:

"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框架。谢谢

0 个答案:

没有答案