我有以下employee数据结构:
{
"_id":{
"$oid":"62836b0b3c1e2c19eaaac07e"
},
"firstname":"jean",
"lastname":"paul",
"email":"employee@test.co",
"password":"d94307e0eabb9bba1ea1291e4b043175e11dcc43875a4858690e5c236b989f3e",
"salt":"2CzpCiIbiyYcSxQ",
"organizations":[
{
"organizationid":{
"$oid":"62836aa93c1e2c19eaaac07d"
},
"organizationname":"test",
"ismanager":false,
"groups":[
{
"name":"mongroupe",
"permissions":[
0,
2
]
}
],
"permissions":[
1
]
}
]
}
我正在尝试在 go 中构建一个向数组添加一组权限的函数organizations.[x].groups.[x].permissions。每个permission都是一个简单的整数。
我想出了以下代码:
func AddPermissionsToGroup(groupName string, organizationId primitive.ObjectID, permissions []global.Permission) error {
if res, err := employeesCollection.UpdateMany(
context.TODO(),
bson.M{},
bson.M{
"$addToSet": bson.M{
"organizations.$[org].groups.$[grp].permissions": bson.M{
"$each": permissions,
},
},
},
options.Update().SetArrayFilters(
options.ArrayFilters{
Filters: []interface{}{
bson.M{
"org.organizationid": organizationId,
},
bson.M{
"grp.name": groupName,
},
},
},
),
); res.MatchedCount == 0 {
return global.ErrEntityNotFound
} else if res.ModifiedCount == 0 {
return global.ErrNoUpdateNeeded
} else if err != nil {
return fmt.Errorf("failed updating employees | %s", err.Error())
}
return nil
}
该代码返回以下错误:写入异常:写入错误:[无法将数组更新应用于非数组元素组:null]。
我不知道这是什么意思。
也许引擎不喜欢我使用两个 s 的事实ArrayFilter?
叮当猫咪
相关分类