0

リポジトリ パターンの MongoDB ベースの実装を呼び出す従来の REST および ODATA 対応の Web API コントローラーがあります。

私は取得し続けます

33556193 バイトのオーバーフロー ソート ステージ バッファー データ使用量が 33554432 バイト例外の内部制限を超えています

最初の 12010 件以上のレコードをスキップして上位 10 件を取得しようとすると

?$skip=12020&$top=10&$orderby=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 と接続文字列を使用してデータベースを取得することに関連するすべてのコードが含まれています。

4

1 に答える 1