从另一个相同类型的数组向数组添加新值 MongoDBGO

2024年 2月 8日 48.5k 0

从另一个相同类型的数组向数组添加新值 mongodb-go

php小编鱼仔在这里为大家介绍一种从另一个相同类型的数组向数组添加新值的方法,即在MongoDB-GO中的操作。这种方法可以帮助开发者更方便地对数组进行修改和更新,提高开发效率。下面我们将详细介绍这个方法的具体步骤和使用技巧,希望对大家有所帮助!

问题内容

我目前正在 golang 上使用 mongodb 驱动程序,并尝试从相同类型的输入数组向文档数组添加字段:

type organization struct {
id string `bson:"_id,omitempty" json:"id,omitempty" `
name string `bson:"name,omitempty" json:"name,omitempty" validate:"required"`
members []member `bson:"members,omitempty" json:"members,omitempty" validate:"required"`
owner string `bson:"owner,omitempty" json:"owner,omitempty" validate:"required"`
createdat *time.time `bson:"created_at,omitempty" json:"created_at,omitempty"`
updatedat *time.time `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
}

type member struct {
userid string `bson:"user_id" json:"user_id" validate:"required"`
permissions []string `bson:"permissions" json:"permissions" validate:"required"`
addedby string `bson:"added_by" json:"added_by" validate:"required"`
status string `bson:"status" json:"status" validate:"required"`
addedat time.time `bson:"added_at" json:"added_at"`
}

登录后复制

具体来说,我正在尝试将成员数组中的值附加到文档中的值。这是我当前使用的功能:

func (o *organization) addmembers (organizationid string, members []member ) (*organization, error){
// if it doesn't exists it will be created
collection := client.database("app-data").collection("organizations")

log.println("[app-data-db:add-members] requested new add members: ", members, organizationid)

change := bson.m{
"$push": bson.m {
"members": bson.m{"$each": members},
},
}

id, err := primitive.objectidfromhex(organizationid)
if err != nil{
log.println("[app-data-db:add-members] cannot convert to primitive: ", id, organizationid)
return nil, err
}

filter := bson.d{{"_id", id}}

result, err := collection.updateone(context.todo(), filter, change)
if err != nil {
return nil, err
}

// get newly updated result
updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

return updatedorg, nil

}

登录后复制

从日志中我检查了 id 和输入成员数组的格式是否正确。但是我遇到了这个错误:

http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID

登录后复制

我猜想错误是在我定义更新操作的方式中出现的,但是我一直无法找到解决方案。

任何帮助将不胜感激,提前致谢!

解决方法

看起来错误来自 *mongo.updateresult 类型中的 upsertedid 。由于某种原因,返回的 id 为零。

改变

// get newly updated result
updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

登录后复制

对于

// get newly updated result
updatedOrg, _ := o.GetOne(organizationID)

登录后复制

成功了。

以上就是从另一个相同类型的数组向数组添加新值 MongoDB-GO的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论