Массовое обновление таймсерий C# MongoDB с добавлением повторяющихся записейC#

Место общения программистов C#
Гость
Массовое обновление таймсерий C# MongoDB с добавлением повторяющихся записей

Сообщение Гость »

Использование MongoDB 7 и MongoDB.Driver 2.24.0 в .NET 7
У меня есть коллекция MongoDB, определенная как таймсерия, работает нормально, если я делаю только вставки, но теперь , записи могут дублироваться, и мне придется выполнить какую-то вставку/обновление. Я искал несколько примеров upserts, но, похоже, они неправильно работают с временными рядами, поэтому я закончил делать это следующим образом.
cTimeseries — это простой класс C#, подобный этому

Код: Выделить всё

public class cTimeseries {
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; }
/// 
/// Date in format "2024-03-12T14:14:57.000Z"
/// 
public DateTime timestamp { get; set; }// = new (0,0);
/// 
/// string with an alfanumeric code
/// 
public Metadata metadata { get; set; } = new Metadata();
/// 
/// set of 8 measurements
/// 
public double[] Measurements { get; set; }
/// 
/// Summer Flag
/// 
public byte Summer { get; set; }
/// 
/// kind of measure, default 1
/// 
public byte MeasureKind { get; set; } = 1;
/// 
/// extra data 26 caracters
/// 
public string Extradata { get; set; }
}
И моя текущая реализация upsert такова:

Код: Выделить всё

 public async Task Upsert(List records)
{
//queue all the deletes from incoming records and bulk delete/insert
List requests = new List(records.Count());
foreach (Ctimeseries record in records) {
var filter = new FilterDefinitionBuilder().Where(m => m.timestamp == record.timestamp && m.metadata == record.metadata);
var request = new DeleteOneModel(filter); //queue the delete
requests.Add(request);
}
await _CtimeseriesCol.BulkWriteAsync(requests); //perform bulk delete 

Подробнее здесь: [url]https://stackoverflow.com/questions/78160549/c-sharp-mongodb-timeseries-bulk-update-with-duplicate-records-upsert[/url]

Вернуться в «C#»