C#mongodb驱动程序-子阵列中的更新不工作
我有以下型号(仅重要型号):C#mongodb驱动程序-子阵列中的更新不工作,c#,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,我有以下型号(仅重要型号): 公共类模型 { [BsonId] 公共ObjectId ModelId; 公开名单游戏; } 公开课游戏 { [BsonId] 公共对象配子ID; 公开列表匹配; } 公开课比赛 { [BsonId] 公共对象匹配ID; 公众投票; } 我有以下疑问: var filter = Builders<Model>.Filter.And( Builders<Model>.Filter.Eq(
公共类模型
{
[BsonId]
公共ObjectId ModelId;
公开名单游戏;
}
公开课游戏
{
[BsonId]
公共对象配子ID;
公开列表匹配;
}
公开课比赛
{
[BsonId]
公共对象匹配ID;
公众投票;
}
我有以下疑问:
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
};
var filter=Builders.filter.And(
Builders.Filter.Eq(x=>x.ModelId,ModelId),
Builders.Filter.ElemMatch(x=>x.Games,t=>t.GameId==GameId));
var update=Builders.update.Inc(x=>x.Games[-1]。Matches.First(t=>t.MatchId==MatchId)。投票[1],2);
var options=new FindOneAndUpdateOptions()
{
ReturnDocument=ReturnDocument.After
};
Im使用FindOneAndUpdateAsync
并能够检索数据,但不做任何更改。
试了几次,还是没有改变
对评论的答复:
有东西被退回吗?
是的,整个文件。此外,当我使用固定索引时,例如:games[0]。匹配[0]时,一切正常
我是否尝试在shell中运行命令?
不,不幸的是,到目前为止,我还没有尝试使用shell我认为应该使用update.push方法来附加数组。
Command=CreateCommand(commandType,message,source);
var filter=Builders.filter.Eq(“\u id”,seqid);
var update=Builders.update.Push(“Commands”,command);
var result=collection.UpdateOneAsync(过滤器,更新);
2跟进:(1)使用此筛选器运行查找时是否返回任何内容?(2) 你试过在shell中运行这个吗?如果是的话,语法是什么?@CraigWilson在editOh中回答说,我想我看到了这个问题。。。第一个(t=>t.MatchId==MatchId)在此上下文中不受支持。我认为在shell语法中没有实现这一点的方法。可以说,我们应该在这里抛出一个异常。难道“x=>x.Games[-1]”不会抛出System.ArgumentOutOfRangeException异常吗?Craig,那么在嵌套枚举中查找时应该怎么做呢?Onosa,no..-1是mongo的位置运算符。它被替换为$SIGNANTIC,以避免您的答案中的错误。这不是子数组中的问题。问题是,在执行子数组更新时,通常有两个正定运算符
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
};
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);