我有一个经典的支持 REST 和 ODATA 的 Web API 控制器,它调用基于 MongoDB 的存储库模式实现。
我不断得到
溢出排序阶段缓冲数据使用量 33556193 字节超出内部限制 33554432 字节异常
当我尝试跳过前 12010+ 条记录并获得前 10 名时
?$skip=12020&$top=10&$orderby=Serial
经过一番搜索后,我尝试在 Serial 上实现索引,例如
private void GetCollection() //is like DBSet of some entity
{
_collection = _dbContext.Database
.GetCollection<TEntity>(typeof(TEntity).Name);
Type typeParameterType = typeof(TEntity);
if (typeParameterType.Name == "StoreCommand")
if (_collection.IndexExists("Serial") == false)
_collection.CreateIndex(IndexKeys<StoreCommand>.Ascending(_ => _.Serial));
}
我的存储库实现是这样的。
public class MongoDbRepository<TEntity> :
IRepository<TEntity> where
TEntity : EntityBase
{
private MongoCollection<TEntity> _collection;
private SNDbContext _dbContext;
public MongoDbRepository(SNDbContext dbContext)
{
_dbContext = dbContext;
GetCollection();
}
private void GetCollection()
{
_collection = _dbContext.Database
.GetCollection<TEntity>(typeof(TEntity).Name);
}
public IQueryable<TEntity> GetAll()
{
return _collection.AsQueryable();
}//............And other functions after this
}
来自服务层的调用是这样的
IQueryable<StoreCommand> GetAllStoreCommands()
{
return _uow.StoreCommands.GetAll();
}
其中 SNDbContext 包含与使用 MongoClient 和连接字符串获取数据库相关的所有代码。