繁体   English   中英

使用官方C#MongoDB驱动程序更新嵌套列表中的单个元素

[英]Updating a single element in a nested list with official C# MongoDB driver

我有一个简单的多轮游戏,我想更新最近一轮:

class Game
{
    public ObjectId Id { get; set; }
    public List<Round> Rounds { get; set; }
}

class Round
{
    public int A { get; set; }
    public int B { get; set; }
}

我怎样才能使用官方的MongoDB C#驱动程序做相当于games.Rounds.Last().A = x

编辑:添加了Round.B。 请注意,在这种情况下,A和B都可以同时更新,因此我无法保存整个文档。 我只想更新A字段。

如果你使用LINQ支持的驱动程序,那么我想你可以这样做:

var last = collection.AsQueryable<Game>().Last();
last.A = x;
collection.Save(last);

我想它不会像手动编码的更新语句那样高效,但是这在功能上大部分都反映了你的javascript版本。

编辑:没有LINQ,并进行子集更新

var query = Query.EQ("_id", MongoDB.Bson.BsonValue.Create(games.Id);
var update = Update.Set("Rounds." + games.Rounds.Length - 1 + ".A", MongoDB.Bson.BsonValue.Create(x));

Collection.Update(query, update);

看起来不太漂亮,但你可以用Mongo中的数字索引到一个数组中,所以你会错过更新之前在游戏中添加新Round的情况。

你可以这样做:

var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
collection.Update(query, update);

希望这个对你有帮助。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM