как обновить элементы в массиве / списке с помощью драйвера mongo c#?

С последним обновлением до 10gen c# драйвер для mongodb Я хочу обновить свой код, чтобы он использовал строго типизированную версию.

мой предыдущий звонок был :

var update2 = new UpdateBuilder();
var index = album.Ratings.IndexOf(rating);
update2.Set("Ratings." + index + ".Number", number);
update2.Set("Rating", album.Rating);
_session.Db().GetCollection<Album>("Album")
    .Update(Query<Album>.Where(x => x.Id == objId), update2); //this line is working

новый вызов будет такой :

update.Set(x => x.Ratings[index].Number, number);
//update2.Set("Ratings." + index + ".Number", number); previous call

но я получаю это исключение :

невозможно определить сведения о сериализации для выражения: (Альбом х) => х.Рейтинги.get_Item (WebApp.Области.ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.Контроллеры.RatingController+c _ _ DisplayClass5.индекс.)Число.

есть ли способ обновить элемент внутри списка?

1 ответов


интересные задачи. Это работает при использовании константы, как показано ниже:

var update = Update<Album>.Set(x => x.Ratings[0].Number, 10);

однако это, по-видимому, ломается, когда вы используете переменную, как вы сделали с индексом. Это определенно ошибка. Я создал вопрос в Jira здесь: https://jira.mongodb.org/browse/CSHARP-598.

это, скорее всего, связано с тем, что мы не частично оцениваем выражение перед его обработкой.