BuildFeed/BuildFeed.Model/BuildRepository-Year.cs

91 lines
3.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
namespace BuildFeed.Model
{
2017-02-24 04:53:49 +08:00
public partial class BuildRepository
{
public async Task<int[]> SelectAllYears(int limit = -1, int skip = 0)
{
2018-02-07 06:16:37 +08:00
var query =
2017-02-24 04:53:49 +08:00
_buildCollection.Aggregate()
.Match(Builders<Build>.Filter.Ne(b => b.BuildTime, null))
.Group(new BsonDocument("_id", new BsonDocument("$year", $"${nameof(Build.BuildTime)}")))
.Sort(new BsonDocument("_id", -1))
.Skip(skip);
if (limit > 0)
{
query = query.Limit(limit);
}
2018-02-07 06:16:37 +08:00
var grouping = await query.ToListAsync();
2017-02-24 04:53:49 +08:00
return (from g in grouping
2018-02-07 06:16:37 +08:00
where !g["_id"].IsBsonNull
select g["_id"].AsInt32).ToArray();
2017-02-24 04:53:49 +08:00
}
public async Task<long> SelectAllYearsCount()
{
2018-02-07 06:16:37 +08:00
var query = await _buildCollection.Aggregate()
.Match(Builders<Build>.Filter.Ne(b => b.BuildTime, null))
.Group(new BsonDocument("_id", new BsonDocument("$year", $"${nameof(Build.BuildTime)}")))
.ToListAsync();
2017-02-24 04:53:49 +08:00
return query.Count;
}
public async Task<List<Build>> SelectYear(int year, int limit = -1, int skip = 0)
{
2018-02-07 06:16:37 +08:00
var query =
2018-10-27 05:41:11 +08:00
_buildCollection.Find(Builders<Build>.Filter.And(Builders<Build>.Filter.Gte(b => b.BuildTime,
new DateTime(year,
1,
1,
0,
0,
0,
DateTimeKind.Utc)),
2018-02-07 06:16:37 +08:00
Builders<Build>.Filter.Lte(b => b.BuildTime,
2018-10-27 05:41:11 +08:00
new DateTime(year,
12,
31,
23,
59,
59,
DateTimeKind.Utc))))
2018-02-07 06:16:37 +08:00
.Sort(sortByCompileDate)
.Skip(skip);
2017-02-24 04:53:49 +08:00
if (limit > 0)
{
query = query.Limit(limit);
}
return await query.ToListAsync();
}
2018-02-07 06:16:37 +08:00
public async Task<long> SelectYearCount(int year) => await
2018-10-27 05:41:11 +08:00
_buildCollection.CountDocumentsAsync(Builders<Build>.Filter.And(Builders<Build>.Filter.Gte(b => b.BuildTime,
new DateTime(year,
1,
1,
0,
0,
0,
DateTimeKind.Utc)),
2018-02-07 06:16:37 +08:00
Builders<Build>.Filter.Lte(b => b.BuildTime,
2018-10-27 05:41:11 +08:00
new DateTime(year,
12,
31,
23,
59,
59,
DateTimeKind.Utc))));
2017-02-24 04:53:49 +08:00
}
}