我希望使用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()函数?
答案 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