我想用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()函数?
而不只是附加COUNT(),它可以让你的聚合阶段,你必须以.ToCursor或.FirstOrDefault或类似的完成聚集。该FirstOrDefault返回AggregateCountResult,其中有Count属性。
ulong count = col.Aggregate()
.Match(someFilterDefinition)
.Project(someProjectionDefinition)
.Unwind("someFieldName")
.Count()
.FirstOrDefault() // returns AggregateCountResult
.Count(); // returns ulong