C# MongoDb-升级MongoDb后需要游标选项
由于我们被迫升级mongo安装,我们在一些聚合函数调用期间收到一个错误: MongoDB.Driver.MongoCommandException:“命令‘聚合’失败:错误 “cursor”选项是必需的,但带有explain的聚合除外 参数(响应:{“确定”:0.0,“errmsg”:“游标”选项为 必填项,除了使用explain参数“code”进行聚合外:9, “代码名”:“FailedToParse”}”C# MongoDb-升级MongoDb后需要游标选项,c#,mongodb,C#,Mongodb,由于我们被迫升级mongo安装,我们在一些聚合函数调用期间收到一个错误: MongoDB.Driver.MongoCommandException:“命令‘聚合’失败:错误 “cursor”选项是必需的,但带有explain的聚合除外 参数(响应:{“确定”:0.0,“errmsg”:“游标”选项为 必填项,除了使用explain参数“code”进行聚合外:9, “代码名”:“FailedToParse”}” BsonArray arr=BsonSerializer; var pipeline=
BsonArray arr=BsonSerializer;
var pipeline=arr.Select(x=>x.AsBsonDocument).ToList();
//AggregateArgs aArgs=新的AggregateArgs{Pipeline=bsonList};
var cursor=collection.Aggregate(pipeline.ResultDocuments);
我已经弄明白了,我们必须手动将游标配置添加到BsonDocument中,但我们无法弄清楚查询应该如何配置
是否有解决此异常的方法(不更改驱动程序)?您在查询字符串的末尾有一个额外的大括号通过自己构建命令,终于能够解决此问题:
var cmd = new CommandDocument()
{
{"aggregate", "collection_name" },
{"pipeline", arr},
{"cursor", BsonDocument.Parse("{}") }
};
var res = db.RunCommand(cmd);
试一试:
var cursor=collection.Aggregate(管道);
var results=cursor.ToList()//只需要一份文件清单就可以了
while(cursor.MoveNext())//或在游标上迭代
{
foreach(cursor.Current.ToArray()中的var doc)
{
//在这里访问您的文档
}
}
这就是在我的情况下有效的方法(mongocshardriver v1.9.0-rc0,mongodb服务器4.4.0)OutputMode=AggregateOutputMode。光标位于AggregateArgs
中
public IEnumerable<BsonDocument> Run(MongoCollection<Item> items)
{
var priceRange = new BsonDocument(
"$subtract",
new BsonArray
{
"$Price",
new BsonDocument(
"$mod",
new BsonArray{"$Price", 100})
});
var grouping = new BsonDocument(
"$group",
new BsonDocument
{
{"_id", priceRange},
{"count", new BsonDocument("$sum", 1)}
});
var sort = new BsonDocument(
"$sort",
new BsonDocument("_id", 1)
);
var args = new AggregateArgs
{
Pipeline = new[] { grouping, sort },
OutputMode = AggregateOutputMode.Cursor,
};
return items.Aggregate(args);
}
public IEnumerable运行(MongoCollection项)
{
var priceRange=新的B单据(
“$subtract”,
新贝索奈酒店
{
“$Price”,
新的B文件(
“$mod”,
新BsonArray{“$Price”,100})
});
var分组=新的BsonDocument(
“$group”,
新的B文件
{
{u id',priceRange},
{“count”,新的BsonDocument($sum),1)}
});
var sort=新的BsonDocument(
“$sort”,
新的B文件(“id”,1)
);
var args=新的聚合搜索
{
管道=新[]{分组,排序},
OutputMode=AggregateOutputMode.Cursor,
};
退货项目。合计(args);
}
我通过删除AggregateArgs对象上的OutputMode属性分配修复了我的问题。我在“OutputMode=AggregateOutputMode.Cursor”行上遇到编译错误,删除这一行允许我的代码使用最新版本的驱动程序2.12.3进行编译
public IEnumerable<BsonDocument> Run(MongoCollection<Item> items)
{
var priceRange = new BsonDocument(
"$subtract",
new BsonArray
{
"$Price",
new BsonDocument(
"$mod",
new BsonArray{"$Price", 100})
});
var grouping = new BsonDocument(
"$group",
new BsonDocument
{
{"_id", priceRange},
{"count", new BsonDocument("$sum", 1)}
});
var sort = new BsonDocument(
"$sort",
new BsonDocument("_id", 1)
);
var args = new AggregateArgs
{
Pipeline = new[] { grouping, sort },
OutputMode = AggregateOutputMode.Cursor,
};
return items.Aggregate(args);
}