public async Task AddRecurrentJob(JobDb job) { var collection = _mongoClientProvider.GetCollection <JobMongoModel>(); var update = Builders <JobMongoModel> .Update .Set(x => x.Cron, job.Cron) .Set(x => x.StartAt, job.StartAt); var needsProperties = _jobDbProperties.Where(x => x.Name != nameof(JobMongoModel.Cron) && x.Name != nameof(JobMongoModel.StartAt)); //Если джоб уже существет апдейтем только 2 поля //Если нужно создать, то устанавливаем все остальные поля foreach (var jobDbProperty in needsProperties) { update = update.SetOnInsert(jobDbProperty.Name, jobDbProperty.GetValue(job)); } await IMongoCollectionExtensions.UpdateOneAsync(collection, x => x.JobKey == job.JobKey && (x.Status == JobStatus.Executing || x.Status == JobStatus.Ready), update, new UpdateOptions { IsUpsert = true }); }