public async Task <Auditorium> UpdateAsync(Auditorium auditorium) { var housing = await Housings.FindOneAndUpdateAsync( c => string.Equals(c.Id, auditorium.HousingId) && c.Auditoriums.Any(a => string.Equals(a.Id, auditorium.Id)), Builders <Housing> .Update.Set(c => c.Auditoriums.ElementAt(-1), auditorium)); //-1 means first matching element of nested array return(housing.Auditoriums.FirstOrDefault(c => string.Equals(c.Id, auditorium.Id))); }
public async Task <Auditorium> GetById(string housingId, string auditoriumId) { var filter = Builders <Housing> .Filter.Eq("Id", housingId); var housing = await Housings.Find(filter).FirstOrDefaultAsync(); return(housing?.Auditoriums?.FirstOrDefault(a => string.Equals(a.Id, auditoriumId))); }
public async Task <bool> IsHousingExists(int number) { var filter = Builders <Housing> .Filter.Eq("Number", number); return(await Housings .Find(filter) .FirstOrDefaultAsync() != null); }
public async Task <Housing> GetById(string id) { var filter = Builders <Housing> .Filter.Eq("Id", id); return(await Housings .Find(filter) .FirstOrDefaultAsync()); }
public async Task RemoveAsync(Auditorium auditorium) { var filter = Builders <Housing> .Filter.Eq("Id", auditorium.HousingId); var housing = await Housings.Find(filter).FirstAsync(); housing.Auditoriums.Remove(housing.Auditoriums.FirstOrDefault(a => string.Equals(a.Id, auditorium.Id))); await Housings.ReplaceOneAsync(h => string.Equals(h.Id, housing.Id), housing); }
public async Task <bool> IsAuditoriumExists(string housingId, int number, string exceptAuditoriumId) { var filter = Builders <Housing> .Filter.ElemMatch( f => f.Auditoriums, f => string.Equals(f.HousingId, housingId) && !string.Equals(f.Id, exceptAuditoriumId) && f.Number == number); return((await Housings .Find(filter) .FirstOrDefaultAsync()) != null); }
public async Task <Housing> UpdateAsync(Housing housing) { var filter = Builders <Housing> .Filter.Eq("Id", housing.Id); var update = Builders <Housing> .Update.Set(h => h.Number, housing.Number); await Housings.UpdateOneAsync(filter, update); return(await GetById(housing.Id)); }
public async Task <IEnumerable <Auditorium> > GetAllAsync(string housingId) { var filter = Builders <Housing> .Filter.Eq("Id", housingId); var housing = await Housings.Find(filter).FirstOrDefaultAsync(); if (housing != null) { return(housing.Auditoriums?.ToList() ?? new List <Auditorium>()); } return(null); }
public async Task <IEnumerable <AuditoriumDetailedInfo> > GetDetailedInfoAsync() { var result = await Housings .Aggregate() .Unwind(field => field.Auditoriums) .Project(new BsonDocument { { "Id", "$Auditoriums.Id" }, { "Number", "$Auditoriums.Number" }, { "Capacity", "$Auditoriums.Capacity" }, { "HousingNumber", "$Number" }, { "Floor", "$Auditoriums.Floor" }, { "Type", "$Auditoriums.Type" } }) .ToListAsync(); return(result.Select(r => BsonSerializer.Deserialize <AuditoriumDetailedInfo>(r)).ToList()); }
public async Task <Auditorium> AddAsync(Auditorium auditorium) { var filter = Builders <Housing> .Filter.Eq("Id", auditorium.HousingId); var housing = await Housings.Find(filter).FirstAsync(); if (housing == null) { return(null); } if (housing.Auditoriums == null) { housing.Auditoriums = new List <Auditorium>(); } auditorium.Id = ObjectId.GenerateNewId().ToString(); housing.Auditoriums.Add(auditorium); await Housings.ReplaceOneAsync(h => string.Equals(h.Id, housing.Id), housing); return(auditorium); }
public async Task <IEnumerable <HousingDetailedInfo> > GetDetailedInfoAsync() { var result = await Housings .Aggregate() .Unwind(h => h.Auditoriums) .Group(new BsonDocument { { "_id", new BsonDocument { { "number", "$Number" }, { "type", "$Auditoriums.Type" } } }, { "CapacityCount", new BsonDocument { { "$sum", "$Auditoriums.Capacity" } } }, { "Count", new BsonDocument { { "$sum", 1 } } } }) .Group(new BsonDocument { { "_id", new BsonDocument { { "number", "$_id.number" } } }, { "TotalCapacity", new BsonDocument { { "$sum", "$CapacityCount" } } }, { "CountPerType", new BsonDocument { { "$push", new BsonDocument { { "type", "$_id.type" }, { "count", "$Count" } } } } } }) .Project(new BsonDocument { { "Number", "$Number" }, { "CountPerType", "$CountPerType" }, { "TotalCapacity", "$TotalCapacity" } }) .ToListAsync(); return(result.Select(r => r.AsHousingDetailedInfo()).ToList()); }
public async Task <IEnumerable <Housing> > GetAllAsync() { return(await Housings.Find(_ => true).ToListAsync()); }
public async Task <Housing> AddAsync(Housing housing) { await Housings.InsertOneAsync(housing); return(housing); }
public async Task RemoveAsync(Housing housing) { var filter = Builders <Housing> .Filter.Eq("Id", housing.Id); await Housings.DeleteOneAsync(filter); }