1

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

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; }
}

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

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

4

2 回答 2

4

如果您使用支持 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 中的数字索引到数组中,因此您会错过在更新之前将新回合添加到游戏中的情况。

于 2012-05-03T23:25:26.083 回答
-1

你可以这样做:

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

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

于 2014-12-16T12:54:31.830 回答