Что вам нужно сделать, это:
В вашем базовом классе (где вы объявили события) создайте защищенные методы, которые можно использовать для повышения событий:
public class MyClass
{
public event EventHandler Loading;
public event EventHandler Finished;
protected virtual void OnLoading(EventArgs e)
{
EventHandler handler = Loading;
if( handler != null )
{
handler(this, e);
}
}
protected virtual void OnFinished(EventArgs e)
{
EventHandler handler = Finished;
if( handler != null )
{
handler(this, e);
}
}
}
(Обратите внимание, что вам, вероятно, следует изменить эти методы, чтобы проверить, нужно ли вам вызывать обработчик событий или нет).
Затем в классах, которые наследуются от этого базового класса, вы можете просто вызовите методы OnFinished или OnLoading, чтобы поднять события:
public AnotherClass : MyClass
{
public void DoSomeStuff()
{
...
OnLoading(EventArgs.Empty);
...
OnFinished(EventArgs.Empty);
}
}
Вы должны использовать две $group
стадии здесь. Сначала с id
и cate_id
и count
количество документов и , а затем с id
db.collection.aggregate([
{ "$group": {
"_id": {
"id": { "$toLong": "$id" },
"cate_id": "$cate_id"
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": " Вы должны использовать две $group
стадии здесь. Сначала с id
и cate_id
и count
количество документов и , а затем с id
[110]id.id",
"categories": {
"$push": {
"cate_id": " Вы должны использовать две $group
стадии здесь. Сначала с id
и cate_id
и count
количество документов и , а затем с id
[110]id.cate_id",
"count": "$count"
}
}
}}
])