我有一个简单的游戏,有多轮,我想更新最近一轮:
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字段。
答案 0 :(得分: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中的数字索引到一个数组,所以你会错过在你更新之前在游戏中添加新Round的情况。
答案 1 :(得分:-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);
我希望你觉得这很有用。感谢。