#c# #mongodb
#c# #mongodb
Вопрос:
Структура документа выглядит следующим образом:
_id
Name
Stations: Array
0: Object
ID
Name
Processes: Array
0: Object
ID
Name
Я хочу изменить имя процесса. Тип, станция и процесс выбираются с помощью выпадающих списков.
Я попробовал что-то вроде этого:
var filter = Builders<TEAM_Type>.Filter.Eq("Stations.Processes.TID", (CB_SelectStation.SelectedItem as StationDescription).Processes[selectedItemStorage].TID);
var update = Builders<TEAM_Type>.Update.Set("Stations.$.Processes.$.Name", ((sender as ComboBox).Text));
db.GetCollection<TEAM_Type>("types").UpdateMany(filter, update);
Но я получаю исключение
Too many positional (i.e. '
Я также пытался
var filter = Builders<TEAM_Type>.Filter.And(
Builders<TEAM_Type>.Filter.Eq("Stations.TID", (CB_SelectStation.SelectedItem as StationDescription).TID),
Builders<TEAM_Type>.Filter.Eq("Stations.Processes.TID", (CB_SelectStation.SelectedItem as StationDescription).Processes[selectedItemStorage].TID)
);
var update = Builders<TEAM_Type>.Update.Set("Stations.Processes.$.Name", ((sender as ComboBox).Text));
db.GetCollection<TEAM_Type>("types").UpdateMany(filter, update);
Но получил это
Cannot create field 'Processes' in element {Stations: [ { TID: 1, Name: "Station 1", IPAddress: null, Processes: [ { TID: 2, Name: "Process 2", Limits: [], Constants: [] } ] } ]}"
Как я могу задать имя элемента массива в другом массиве?
Предпочтительно даже в другом массиве...
Ответ №1:
Я все понял правильно...
var filter = Builders<TEAM_Type>.Filter.And(
Builders<TEAM_Type>.Filter.Eq("Stations.TID", (CB_SelectStation.SelectedItem as StationDescription).TID),
Builders<TEAM_Type>.Filter.Eq("Stations.Processes.TID", (CB_SelectStation.SelectedItem as StationDescription).Processes[selectedItemStorage].TID)
);
var update = Builders<TEAM_Type>.Update.Set("Stations.$[].Processes.$.Name", ((sender as ComboBox).Text));
db.GetCollection<TEAM_Type>("types").UpdateMany(filter, update);
использование $[] вместо if $ для станций сообщает set-команде обновить все найденные индексы станций. так что все равно швы.
) elements found in path 'Stations.$.Processes.$.Name'"
Я также пытался
Но получил это
Как я могу задать имя элемента массива в другом массиве?
Предпочтительно даже в другом массиве…
Ответ №1:
Я все понял правильно…
использование $[] вместо if $ для станций сообщает set-команде обновить все найденные индексы станций. так что все равно швы.