У меня есть JSON ниже в коллекции mongodb
{
"Id":"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"allowedNssaiList": [
{
"allowedSnssaiList": [
{
"allowedSnssai": {
"sst": 1,
"sd": "2"
},
"IMSI": "244340000000001",
"tac": "3022"
}
],
"accessType": "3GPP_ACCESS"
}
]
}
Я хотел бы добавить к подмассиву allowSnssaiList объект
{
"allowedSnssai": {
"sst": 1,
"sd": "2"
},
"IMSI": "244340000000001",
"tac": "3022"
}
Я пробовал со следующим
selector := bson.M{"_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"}
PushToArray := bson.M{"$addToSet": bson.M{"allowedSnssaiList": bson.M{"allowedSnssai": bson.M{"sst": 3,"sd": "4"}, "IMSI": "244510000000004","tac": "3022"}}}
err := db.C(COLLECTION).Update(selector, PushToArray)
но когда я пу sh, он плохо добавляется, я получаю
{
"_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"allowedNssaiList": [
{
"allowedSnssaiList": [
{
"allowedSnssai": {
"sst": 1,
"sd": "2"
},
"IMSI": "244340000000001",
"tac": "3022"
}
],
"accessType": "3GPP_ACCESS"
}
],
"allowedSnssaiList" : [
{
"allowedSnssai" : {
"sst" : 1,
"sd" : "5"
},
"IMSI" : "244340000000005",
"tac" : "3022"
}
]
}
, но я хочу получить результат или добавить как
{
"_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"allowedNssaiList": [
{
"allowedSnssaiList": [
{
"allowedSnssai": {
"sst": 1,
"sd": "2"
},
"IMSI": "244340000000001",
"tac": "3022"
},
{
"allowedSnssai" : {
"sst" : 1,
"sd" : "5"
},
"IMSI" : "244340000000005",
"tac" : "3022"
}
],
"accessType": "3GPP_ACCESS"
}
]
}
Даже изменение на
PushToArray := bson.M{"$addToSet": bson.M{"allowedNssaiList[0].allowedSnssaiList[0]": bson.M{"allowedSnssai": bson.M{"sst": 3,"sd": "4"}, "IMSI": "244510000000004","tac": "3022"}}}
по-прежнему не работает. Любая помощь о том, как достичь моего результата.
Спасибо за ответ ниже, я смог добавить нужный массив, как хотел, однако, я хотел бы изменить любой из объектов, добавленных в массив, поэтому я добавил дополнительное поле ssid в качестве идентификатора для каждого объекта как
{
"_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"allowedNssaiList": [
{
"allowedSnssaiList": [
{
"allowedSnssai": {
"sst": 1,
"sd": "2"
},
"IMSI": "244340000000001",
"tac": "3022",
"ssid":1
},
{
"allowedSnssai" : {
"sst" : 1,
"sd" : "5"
},
"IMSI" : "244340000000005",
"tac" : "3022",
"ssid":2
}
],
"accessType": "3GPP_ACCESS"
}
]
}
Чтобы изменить или обновить значения для объекта с ssid = 2, у меня есть
selector := bson.M{"_id": "3ca85f64-5717-4562-b3fc-2c963f66af33",
"allowedNssaiList.allowedSnssaiList.ssid": 2}
UpdateArray := bson.M{"$set": bson.M{"allowedNssaiList.0.allowedSnssaiList.$": bson.M{"allowedSnssai": bson.M{"sst": 1,
"sd": "1000"}, "IMSI": "244340000000010","tac": "302332", "ssid": "2"}}}
err := db.C(COLLECTION).Update(selector, UpdateArray)
, это приводит к обновлению объекта с ssid = 1, но также изменяет другой объект на ssid = 1, как показано ниже. Я также хотел бы удалить указанный c объект, также используя значение ssid. Любая помощь.
{
"ssid" : 1,
"allowedSnssai" : {
"sst" : 1,
"sd" : "1000"
},
"IMSI" : "244340000000010",
"tac" : "302332"
},
{
"allowedSnssai" : {
"sst" : 1,
"sd" : "2"
},
"IMSI" : "244340000000001",
"tac" : "3022",
"zone" : "zone3",
"ssid" : 1
}
Любая помощь, как этого добиться. Используется ли $ set right?