MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB.Driver.Builders как да групирате и да получите средно

с новия MongoDB .NET драйвер (2.0 - http://docs.mongodb.org/ecosystem/drivers/csharp/) поддръжката на Linq е напълно поддържана, ето синтаксиса на въпроса за подписване на новия драйвер. Много по-четлив .NET код, отколкото преди да използвате синтаксиса на BsonDocument.

    public async Task<List<DailyStat>> GetLast31DaysReport(string id)
    {
        var mc = new MongoClient(_url);
        var db = mc.GetDatabase(DbName);
        var collection = db.GetCollection<Reading>(CollectionName);

        DateTime from = DateTime.Now.AddDays(-31);
        DateTime to = DateTime.Now;

        var output = await collection.Aggregate()
            .Match(r => r.SensorId == id)
            .Match(r => r.Date <= to)
            .Match(r => r.Date >= to.AddDays(-31))
            .Group(r => new { groupedYear = r.Date.Year, groupedMonth = r.Date.Month, groupedDay = r.Date.Day }, g =>
                new {
                    Key = g.Key,
                    avgValue = g.Average(x => x.Value),
                    minValue = g.Min(x => x.Value),
                    maxValue = g.Max(x => x.Value)
                })
            .Project(r => new DailyStat()
                {
                    Day = r.Key.groupedDay,
                    Month = r.Key.groupedMonth,
                    Year = r.Key.groupedYear,
                    Value = r.avgValue,
                    MinValue = r.minValue,
                    MaxValue = r.maxValue
                })
            .ToListAsync().ConfigureAwait(false);

        var returnList = new List<DailyStat>();
        while (returnList.Count < 31)
        {
            var value = output.FirstOrDefault(rec => rec.Day == from.Day && rec.Month == from.Month && rec.Year == from.Year);
            returnList.Add(value ?? new DailyStat() { Month = from.Month, Year = from.Year, Day = from.Day, Value = 0, MaxValue = 0, MinValue = 0 });
            from = from.AddDays(1);
        }
        return returnList;
    }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Многократно използване на позиционния оператор `$` за актуализиране на вложени масиви

  2. Какво се случва с Meteor и Fibers/bindEnvironment()?

  3. Защо hasOwnProperty на модела mongoose връща false, когато свойството съществува?

  4. Как е важен редът на съставните индекси в MongoDB по отношение на производителността?

  5. MongoDB $push