使用官方 C# MongoDB 驱动程序更新嵌套列表中的单个元素
本文关键字:列表 单个 元素 嵌套 更新 官方 MongoDB 驱动程序 | 更新日期: 2023-09-27 18:33:11
我有一个多回合的简单游戏,我想更新最近的回合:
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中的数字索引到数组中,因此您会错过在更新之前将新回合添加到游戏中的情况。
你可以做这样的事情:
var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
collection.Update(query, update);
我希望你觉得这有用。谢谢。