2.7Kпросмотров
11.6%от подписчиков
24 марта 2026 г.
provocationScore: 2.9K
👨💻 Хватит мучить MongoDB через EF Core Вы выбрали MongoDB ради гибкости. А потом два часа потратили на то, чтобы EF Core позволил сделать элементарный фильтр. Поздравляем, вы сами себе враг. EF Core для MongoDB это иллюзия комфорта. Знакомый синтаксис, но в обмен на всё, ради чего вообще брали Mongo: агрегационные пайплайны, геозапросы, полнотекстовый поиск. Провайдер этого просто не умеет. Правильный путь — это MongoDB.Driver напрямую. Ставите пакет:
dotnet add package MongoDB.Driver Делаете кастомный атрибут, чтобы сущность сама знала свою коллекцию:
[CollectionName("orders")]
public class Order
{ [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } public string CustomerName { get; set; }
} Generic-репозиторий читает атрибут сам и никаких магических строк в Program.cs:
public class MongoRepository<T> : IMongoRepository<T>
{ private readonly IMongoCollection<T> _collection; public MongoRepository(IMongoDatabase db) { var name = typeof(T) .GetCustomAttribute<CollectionNameAttribute>()?.Name ?? typeof(T).Name; _collection = db.GetCollection<T>(name); }
} Регистрируете один раз через и больше никогда не трогаете Program.cs при добавлении новых коллекций:
services.AddScoped(typeof(IMongoRepository<>), typeof(MongoRepository<>)); Новая коллекция? Просто новый класс с [CollectionName]. А для сложных запросов Builders<T>:
var filter = Builders<Order>.Filter.Eq(o => o.Status, "pending");
var sort = Builders<Order>.Sort.Descending(o => o.CreatedAt);
var results = await _collection.Find(filter).Sort(sort).ToListAsync(); 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #sharp_view