After some digging I found that Dynamic aggregation will do the job. I've added field month, because anonymous object didn't work.
Map = transactions => from transaction in transactions
select new
{
Value = transaction.Value,
Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name) },
Account_UserName = transaction.Account.UserName,
Time = transaction.Time,
Month = new DateTime(transaction.Time.Year, transaction.Time.Month, 1) // new field
};
And then extended query by .AggregateBy(x => x.Month).CountOn(x => x.Month);
var result = _session.Query<Transaction, Transaction_Search>()
.AggregateBy(x => x.Month)
.CountOn(x => x.Month);
This produces, after some transformation, desired result.