public void SetAsInactive(string deviceId, Alarm.AlarmSubtype subtype) { Device device = collection.AsQueryable() .SelectMany(e => e.Devices) .Where(e => e.Id == deviceId) .FirstOrDefault(); IEnumerable <Alarm> alarms = device.Alarms.Where(e => e.IsActive && e.Subtype == subtype); System.Diagnostics.Debug.WriteLine(collection.AsQueryable() .SelectMany(e => e.Devices) .Where(e => e.Id == deviceId)); foreach (Alarm alarm in alarms) { var filterAlarm = Builders <Device> .Filter.ElemMatch(e => e.Alarms, a => a.Id == alarm.Id); var filter = Builders <Site> .Filter.ElemMatch(e => e.Devices, filterAlarm); int index = (device.Alarms as List <Alarm>).IndexOf(alarm); collection.UpdateOne(filter, Builders <Site> .Update .Set($"Devices.$.Alarms.{index}.IsActive", false)); } }
private void CreateAlarm(string deviceId, string siteId, Alarm.Type alarmType, Alarm.AlarmSubtype subtype, Alarm.Gravity alarmGravity, string shortDescription, string description) { Alarm alarm = new Alarm() { Id = $"{deviceId}-{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}", DeviceId = deviceId, SiteId = siteId, IsActive = true, AlarmType = alarmType, AlarmGravity = alarmGravity, OccuredAt = DateTime.UtcNow, ShortDescription = shortDescription, Description = description, Subtype = subtype }; deviceRepository.AddAlarm(deviceId, alarm); }