MongoDB的C#伯爵汇总

问题描述 投票:0回答:1

我想用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
    }
);

你会得到一个文件(或无文件)与一个单一的“计数”字段,并收到了舞台元素的数量的Int64值。

有一个IAggregateFluent.Count()功能。然而,它返回一个IAggregateFluent我想要一个AggregateCountResult或只是一个简单的无符号长。

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

c# mongodb
1个回答
1
投票

而不只是附加COUNT(),它可以让你的聚合阶段,你必须以.ToCursor或.FirstOrDefault或类似的完成聚集。该FirstOrDefault返回AggregateCountResult,其中有Count属性。

ulong count = col.Aggregate()
    .Match(someFilterDefinition)
    .Project(someProjectionDefinition)
    .Unwind("someFieldName")
    .Count()
    .FirstOrDefault() // returns AggregateCountResult
    .Count();         // returns ulong
© www.soinside.com 2019 - 2024. All rights reserved.