c# - MongoDB C# 聚合计数

标签 c# mongodb

我希望使用 C# 驱动程序 (V 2.7.0) 对集合进行聚合,然后计算结果。

假设我有一个 IMongoCollection col,我会像这样进行聚合:

IAsyncCursor<BsonDocument> cursor = col.Aggregate()
    .Match(someFilterDefinition)
    .Project(someProjectionDefinition)
    .Unwind("someFieldName")
    .ToCursor();
while (cursor.MoveNext())
{
    foreach (BsonDocument doc in cursor.Current)
    {
        doStuff(doc);
    }
}

我希望获得聚合返回的文档数。在 shell 中你会做这样的事情

db.getCollection("someCollectionName").aggregate(
    [
        { 
            "$match" : {
                // some match filter
            }
        }, 
        { 
            "$project" : {
                "someField" : 1
            }
        }, 
        { 
            "$unwind" : "$someField"
        }, 
        { 
            "$count" : "count"
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

你会得到一个带有单个“计数”字段的文档(或没有文档),它具有一个 int64 值,代表它之前阶段的元素数量。

有一个IAggregateFluent.Count()功能。但是它返回一个 IAggregateFluent 我想要一个 AggregateCountResult 或一个简单的 unsigned long。

如何使用 Aggregate.Count() 函数?

最佳答案

您必须使用 .ToCursor 或 .FirstOrDefault 或类似的方法完成聚合,而不是仅仅附加 Count(),这会为您提供一个聚合阶段。 FirstOrDefault 返回具有 Count 属性的 AggregateCountResult。

ulong count = col.Aggregate()
    .Match(someFilterDefinition)
    .Project(someProjectionDefinition)
    .Unwind("someFieldName")
    .Count()
    .FirstOrDefault() // returns AggregateCountResult
    .Count();         // returns ulong

关于c# - MongoDB C# 聚合计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53852442/

相关文章:

c# - 从 ASP.NET 页面下载 EXCEL 文件,无需在服务器上生成物理文件(动态)

c# - WinSCP:在上传/下载文件时查看进度

javascript - 使用 Express REST API 编辑帖子

mongodb - 整个数组上的多键索引

node.js - 使用 Mongoose 和 Redux 删除记录

node.js - gridfs-stream 总是用 "contentType: binary/octet-stream"存储文件

c# - 使用 C# 在 Autocad 中使用 Ctrl + C 复制带基点的实体

c# - 以编程方式更改 WPF DataGrid 单元格背景(不使用 XAML)

c# - 如何在 WPF WebBrowser 控件中允许不受信任的 SSL

ubuntu 14.04 LTS 配置文件上的 mongodb 3.0.4 不是 yaml?