У меня есть коллекция 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; }
}
Код: Выделить всё
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]