MongoDB c#:关于分页的问题
Posted
技术标签:
【中文标题】MongoDB c#:关于分页的问题【英文标题】:MongoDB c# : Question about pagination 【发布时间】:2011-07-07 06:53:46 【问题描述】:使用某些查询的分页结果,我需要从哪个页面获取点。当您将点推出范围时,该对象将返回位于正确页面上的数据,在此页面打开分页结果。 如果可以像这个示例一样获得分页结果,我如何从即将到来的页面中获取项目?
paging
.skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE)
public List<BsonItem> GetData(QueryComplete query, int take, int skip, SortByBuilder sort)
var cursor = Db.Data.FindAs<BsonItem>(query);
if (skip > 0)
cursor.SetSkip(skip);
if (take > 0)
cursor.SetLimit(take);
if (sort != null )
cursor.SetSortOrder(sort);
return cursor.ToList();
感谢您的帮助。
【问题讨论】:
【参考方案1】:页码应该(以及可能的排序顺序和方向)来自客户端。所以客户端点击某个页面然后...
我个人使用某种过滤器,其中包含您需要的所有属性。
使用该过滤器,您只需指定需要在网格中显示的页面以及每页需要多少项目。
var pageNumber = 1;// current page should come from the client
var filter = new BaseFilter()CurrentPage = pageNumber, ItemsPerPage = 30;
var items = GetItemsByFilter(filter, Query.LTE("SomeDate",DateTime.Now)),
SortBy.Ascending("SortField"));
//For basic paging you only following three properties
var totalCount = filter.TotalCount; // here will be total items count
var pagesCount = filter.TotalPagesCount; // here will be total pages count
// pageNumber = current page
您还可以从 BasicFilter 推断并添加查询、排序所需的任何属性。 这里过滤代码(希望对你有用):
public List<Item> GetItemsByFilter(BaseFilter filter,
QueryComplete query, SortByBuilder sort)
var resultItems = new List<Item>();
var cursor = Db.Data.FindAs<BsonItem>(query);
cursor.SetSortOrder(sort);
if (filter.IsNeedPaging)
cursor.SetSkip(filter.Skip).SetLimit(filter.Take);
filter.TotalCount = cursor.Count();
resultItems.AddRange(cursor);
return resultItems;
public class BaseFilter
private int _itemsPerPage = 10;
private int _skip = 0;
private int _currentPage = 1;
public BaseFilter()
IsNeedPaging = true;
public int Skip
get
if (_skip == 0)
_skip = (CurrentPage - 1) * _itemsPerPage;
return _skip;
set
_skip = value;
public int Take
get
return _itemsPerPage;
set
_itemsPerPage = value;
public bool IsNeedPaging get; set;
public int TotalCount get; set;
public int CurrentPage
get
return _currentPage;
set
_currentPage = value;
public int ItemsPerPage
get
return _itemsPerPage;
set
_itemsPerPage = value;
public int TotalPagesCount
get
return TotalCount / ItemsPerPage +
((TotalCount % ItemsPerPage > 0) ? 1 : 0);
【讨论】:
对象是管理超出范围的项目而不是分页方法。您在某处有一个孤立的项目,您添加一个单击事件以在另一个页面的分页视图中打开,但是该点需要打开的页码是多少?我正在搜索在选择的正确页面上打开。 仅使用来自客户端的项目的_id(不管理方向或订单)以上是关于MongoDB c#:关于分页的问题的主要内容,如果未能解决你的问题,请参考以下文章