首页 > 解决方案 > mgo golang 不使用 $set 更新空数组

问题描述

结构和方法:

type Group struct {
    Id                          int64            `bson:"_id,omitempty"`
    MediaFilterExceptionUserIds []int            `bson:"media_filter_exception_user_ids,omitempty"`
}

func (g *Group) Save() error {
    return DB.C("groups").UpdateId(g.Id, bson.M{"$set": &g})
}

func (g *Group) FindById() error {
    return DB.C("groups").FindId(g.Id).One(&g)
}

试图将 media_filter_exception_user_ids 设置为空 []int{} 并且它不起作用:

group := Group{}
group.FindById(123)
group.MediaFilterExceptionUserIds = []int{}
group.Save()

当切片中有项目但未设置空切片时,它可以工作。

标签: mongodbgomgo

解决方案


MediaFilterExceptionUserIds 类型应从 []int 更改为 *[]int,

type Group struct {
    Id                          int64             `bson:"_id,omitempty"`
    MediaFilterExceptionUserIds *[]int            `bson:"media_filter_exception_user_ids,omitempty"`
}

接着

group.MediaFilterExceptionUserIds = &[]int{}

将其设置为 mongodb 中的空数组


推荐阅读