Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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-升级MongoDb后需要游标选项_C#_Mongodb - Fatal编程技术网

C# MongoDb-升级MongoDb后需要游标选项

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=

由于我们被迫升级mongo安装,我们在一些聚合函数调用期间收到一个错误:

MongoDB.Driver.MongoCommandException:“命令‘聚合’失败:错误 “cursor”选项是必需的,但带有explain的聚合除外 参数(响应:{“确定”:0.0,“errmsg”:“游标”选项为 必填项,除了使用explain参数“code”进行聚合外:9, “代码名”:“FailedToParse”}”

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