Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#mongodb驱动程序-子阵列中的更新不工作_C#_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

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