リポジトリ パターンの 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 と接続文字列を使用してデータベースを取得することに関連するすべてのコードが含まれています。