Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用官方C#MongoDB驱动程序更新嵌套列表中的单个元素_C#_Mongodb_Mongodb Query_Mongodb .net Driver_Nosql - Fatal编程技术网

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

使用官方C#MongoDB驱动程序更新嵌套列表中的单个元素,c#,mongodb,mongodb-query,mongodb-.net-driver,nosql,C#,Mongodb,Mongodb Query,Mongodb .net Driver,Nosql,我有一个多回合的简单游戏,我想更新最近一轮: 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; } } 类游戏 { 公共对象Id{get;set;} 公共列表轮数{get;set;} } 班级轮

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

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; }
}
类游戏
{
公共对象Id{get;set;}
公共列表轮数{get;set;}
}
班级轮换
{
公共int A{get;set;}
公共int B{get;set;}
}
如何使用官方的MongoDB C#驱动程序执行与games.Rounds.Last().A=x相当的


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

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

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

外观不太好看,但您可以在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);
var query=query.EQ(e=>e.Id,Id);
var update=update.Set(e=>e.Name,“Harry”);//更新修改器
收集、更新(查询、更新);

我希望你觉得这有用。谢谢。

您是希望以原子方式执行此操作,还是可以收回文档,修改文档,然后发送更改?我只希望发送更改。这一轮的多个部分可以同时编辑。实际上我没有使用LINQ。另外,根据我的编辑,我只想更新A字段,而不想保存整个文档,因为轮中的其他一些字段可能会与A同时更新。啊,所以我需要让每轮都有一个ObjectId?实际上,我忽略了它是嵌套的。我会再考虑一下。这并不能回答问题。Wesley想知道如何更新嵌套的子元素。
var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
collection.Update(query, update);