Установить значение элемента массива в другом массиве

#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-команде обновить все найденные индексы станций. так что все равно швы.