Мне нужно вести историю вызовов API пользователей.для этого я использую драйвер MongoDB и C #.
Вот мой класс модели монго:
public class UsageModel
{
[BsonIgnore]
public static readonly string CollectionName = "ApiUsage";
[BsonRequired]
public string User { get; set; }
[BsonRequired, BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
public Dictionary<DateTime, int> History { get; private set; }
public static IMongoCollection<UsageModel> Collection
{
get => MongoDb.Database.GetCollection<UsageModel>(CollectionName);
}
public static void IncrementTodayStats(string user)
{
var filter = Builders<UsageModel>.Filter.Eq(doc => doc.User, user);
var update = Builders<UsageModel>.Update.
SetOnInsert(doc => doc.History[DateTime.Now.Date], 0).
Inc(doc => doc.History[DateTime.Now.Date], 1);
var res = Collection.UpdateOne(filter, update);
}
}
Проблема в том, что когда я звоню IncrementTodayStats
, я получаю это исключение:
Невозможно определить информацию сериализации для doc => doc.History.get_Item (DateTime.Now.Date).
Я не знаю, что мне не хватает, так какУ меня нет большого опыта работы с MongoDB и сериализацией, и, как этот ответ советует, я поставил BsonDictionaryOptions
decorator.
Я должен упомянуть, что перед увеличением History[DateTime.Now.Date]
я уверен,что UsageModel
, содержащий этот словарь, был создан, и я использовал SetOnInsert
на случай, если запись для DateTime.Now.Date
не присутствовала в словаре до этого запроса.
Любая помощь очень ценится.