C#mongodb驱动程序 - 子数组中的更新无效

时间:2016-04-18 14:05:27

标签: c# mongodb mongodb-.net-driver mongodb-csharp-2.0

我有以下型号(只有重要类型):

public class Model
{
    [BsonId]
    public ObjectId ModelId;
    public List<Game> Games;
}
public class Game
{
    [BsonId]
    public ObjectId GameId;
    public List<Match> Matches;
}
public class Match
{
    [BsonId]
    public ObjectId MatchId;
    public int[] Votes;
}

我有以下查询:

var filter = Builders<Model>.Filter.And(
                            Builders<Model>.Filter.Eq(x => x.ModelId, modelId),
                            Builders<Model>.Filter.ElemMatch(x => x.Games, t => t.GameId == gameId));

var update = Builders<Model>.Update.Inc(x => x.Games[-1].Matches.First(t => t.MatchId == matchId).Votes[1], 2);
var options = new FindOneAndUpdateOptions<Model>()
{
    ReturnDocument = ReturnDocument.After
};

我正在使用FindOneAndUpdateAsync并且我能够检索数据,但没有进行任何更改。 尝试了几次,仍然没有变化。

评论答案:

是否有退货?

是的,整个文件。而且,当我使用固定索引时,例如:games [0] .matches [0]一切正常。

我是否尝试在shell中运行命令?

不,不幸的是,到目前为止我还没有尝试使用shell

1 个答案:

答案 0 :(得分:0)

我认为你应该使用update.push方法来追加数组。 https://docs.mongodb.org/manual/reference/operator/update/push/

Command command = CreateCommand(commandType,message,source); 
var filter = Builders<Sequence>.Filter.Eq("_id", seqid); 
var update = Builders<Sequence>.Update.Push("Commands", command); 
var result =  collection.UpdateOneAsync(filter, update);