我有以下型号(只有重要类型):
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
答案 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);