Как написать bson формат запроса mongodb - PullRequest
0 голосов
/ 12 февраля 2020

Я могу обновить объект массива в документе 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 ()».

...