MongoDB C#汇总计数

时间:2018-12-19 13:38:18

标签: c# mongodb

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

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

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

我希望获得汇总返回的文档数。在外壳中,您将执行以下操作

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

您将获得一个文档(或没有文档),该文档具有单个“ count”字段,其前一个阶段的元素数量为int64值。

有一个IAggregateFluent.Count()函数。但是它返回一个IAggregateFluent 我想要一个AggregateCountResult或只是一个简单的无符号长。

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

1 个答案:

答案 0 :(得分:1)

必须添加.ToCursor或.FirstOrDefault或类似内容,而不是仅添加Count()(这将使您进入聚合阶段)。 FirstOrDefault返回具有Count属性的AggregateCountResult。

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