如何使用mongo c#driver更新数组/列表中的项目?

Vin*_*nyG 6 c# mongodb mongodb-.net-driver

随着mongodb的10gen c#驱动程序的最新更新,我想更新我的代码,因此它使用强类型版本.

我之前的电话是:

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
Run Code Online (Sandbox Code Playgroud)

新的电话会是:

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

但是我得到了这个例外:

无法确定表达式的序列化信息:(Album x)=> x.Ratings.get_Item(WebApp.Areas.API.Controllers.RatingController + <> c__DisplayClass5.index).Number.

有什么方法可以更新List中的项目吗?

Cra*_*son 8

有趣的问题.这在使用如下常量时有效:

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

但是,当您使用变量时,这显然会中断,就像您使用索引一样.这绝对是个错误.我在这里创建了一个Jira问题:https://jira.mongodb.org/browse/CSHARP-598.

这很可能是因为我们在处理之前没有对表达式进行部分评估.