Я могу обновить объект массива в документе mongodb, используя запрос командной строки
db.slicecoll.updateOne({"_id": "3ca85f64-5717-4562-b3fc-2c963f66af33","allowedNssaiList.allowedSnssaiList._id": "3"},
{
"$set": {
"allowedNssaiList.$.allowedSnssaiList.$[inner].allowedSnssai.sst": 2,
"allowedNssaiList.$.allowedSnssaiList.$[inner].allowedSnssai.sd": "4",
"allowedNssaiList.$.allowedSnssaiList.$[inner].tac": "3021",
"allowedNssaiList.$.allowedSnssaiList.$[inner].zone": "zone1",
"allowedNssaiList.$.allowedSnssaiList.$[inner].IMSI": "2443800000033"
}
},
{
"arrayFilters": [{ "inner._id": "3" }]
})
, однако написание формы bson.M для вышеуказанного запроса было трудным, я пробовал
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
selector := bson.M{"_id": "3ca85f64-5717-4562-b3fc-2c963f66af33", "allowedNssaiList.allowedSnssaiList._id": "3"}
UpdateArray := bson.M{"$set": bson.M{
"allowedNssaiList.$.allowedSnssaiList.$[inner].allowedSnssai.sst": 2,
"allowedNssaiList.$.allowedSnssaiList.$[inner].allowedSnssai.sd": "4",
"allowedNssaiList.$.allowedSnssaiList.$[inner].tac": "3021",
"allowedNssaiList.$.allowedSnssaiList.$[inner].zone": "zone1",
"allowedNssaiList.$.allowedSnssaiList.$[inner].IMSI": "2443800000033"}}
arrayFilter := bson.M{ "arrayFilters": [{ "inner._id": "3" }]}
opts := options.Update().SetUpsert(true)
_, err := db.Collection(COLLECTION).UpdateOne(ctx, selector, UpdateArray, opts, options.ArrayFilters(arrayFilter))
, но у меня ошибка синтаксиса относительно массива arrayFilter. Любая помощь, чтобы узнать, что я делаю неправильно?
Я изменил настройку фильтра на
_, err := db.Collection(COLLECTION).UpdateOne(ctx, selector, UpdateArray, opts,options.UpdateOptions().SetArrayFilters(options.ArrayFilters{Filters: []interface{}{bson.M{"inner._id": "3"}}}))
, но я получаю сообщение об ошибке "отсутствует аргумент для преобразования в options.UpdateOptions: options. UpdateOtions ()».