c# - Aggregate() 的 MongoDB 结果集

标签 c# asp.net-mvc mongodb

我开始使用 Mongo 客户端做一些漂亮的查询和聚合.. 但现在我想在 .NET/C# 中使用它,我发现我不能简单地将查询作为文本字段运行..

此外,在求助于构建聚合管道并运行 collection.Aggregate() 函数后,我得到了一个结果集,但我不知道如何遍历它..

任何人都可以在这里帮助指导我吗?

这是我的代码:

var coll = db.GetCollection("animals");
var match = new BsonDocument {
    { "$match",   new BsonDocument {{"category","cats"}} }
};

var group = new BsonDocument{
    {
        "$group", new BsonDocument{
            {"_id", "$species"}, 
            {"AvgWeight", new BsonDocument{{"$avg", "$weight"}}} }
    }
};

var sort = new BsonDocument{{"$sort", new BsonDocument{{"AvgWeight", -1}}}};
var pipeline = new[] { match, group, sort };
var args = new AggregateArgs { Pipeline = pipeline };
var res = coll.Aggregate(args);

foreach (var obj in res)
{ 
   // WHAT TO DO HERE?? 
}

另外,我应该说我对 C#/ASP.NET/MVC 有点生疏,因此非常感谢任何简化的空间。

最佳答案

您的结果是 BsonDocument 的 IEnumerable,您可以使用 BsonSerializer 将它们序列化为 C# 对象。而这段代码片段只是将它们写入你的控制台,但你可以看到你已经输入了对象

 List<Average> returnValue = new List<Average>();
 returnValue.AddRange(documents.Select(x=> BsonSerializer.Deserialize<Average>(x)));

 foreach (var obj in returnValue)
 { 
    Console.WriteLine("Species {0}, avg weight: {1}",returnValue._Id,returnValue.AvgWeight);
 }

然后有一个名为 Average 的类,其中属性名称与 BsonDocument 中的名称匹配,如果您想重命名则(因为 _Id 在 c# 术语中关于命名约定不太好),您可以添加一个 $project BsonDocument到您的管道。

 public class Average
 {
      public string _Id { get; set; }
      public Double AvgWeight {get; set; }
 }

$project 示例(在排序之前将其添加到管道中

 var project = new BsonDocument 
            { 
                { 
                    "$project", 
                    new BsonDocument 
                        { 
                            {"_id", 0}, 
                            {"Species","$_id"},
                            {"AvgWeight", "$AvgWeight"}, 
                        } 
                } 
            };

关于c# - Aggregate() 的 MongoDB 结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072152/

相关文章:

asp.net - oAuth ASP.NET 成员(member)提供商

node.js - mongodb.connect不执行回调函数

C# 比较两个图像之间的像素并只写出差异的更快方法

c# - 401 第二次 HttpClient/HttpWebRequest 调用未经授权

javascript - Kendo菜单一次选择多个项目,ASP.NET MVC

php - Mongo PHP 加入来自另一个集合的数据并更新文档 - 如 SQL JOIN

php - 是否可以在同一个 Dockerfile 中包含 PHP + MongoDb + Nginx?

c# - 我需要在 Visual C# 或更好的建议中创建一个输入对话框?

c# - 回调的通用存储

c# - 禁止在正则表达式中使用特定的特殊字符