我希望按时间顺序从mongo数据库中获取最新的5个元素。数据库非常大,因此性能是一个标准。 使用C#API和.Net框架我的代码是:
var query = parts
.AsQueryable()//Asking for data elements
.OrderByDescending(p => p.DateTime)//get the latest elements
.Take(5)//only get the latest 5 elements
.OrderBy(p => p.DateTime) //order these elements chronologically
;
var returnparts = new ObservableCollection<Part>(query);
根据mongo sort after limit after sort - Not working,这不起作用,因为只使用了最新的.OrderBy
,另一个被覆盖。
可能的其他解决方案是:
在mongo sort after limit after sort - Not working中使用.Skip()
。
代码是:
int noSkip = parts.AsQueryable().Count() - 5;//calculate how many elements to skip
if (noSkip < 0) { noSkip = 0; }//if there are less then 5 elements
var query = parts
.AsQueryable()//Asking for data elements
.OrderBy(p => p.DateTime)//get the latest elements
.Skip(noSkip)//skip everything except the latest 5 elements
;
var returnparts = new ObservableCollection<Part>(query);
这个解决方案对我来说不起作用,因为它性能很差,因为它会两次查看数据库中的每个部分。 (一次用于计算,一次用于跳过)
是否有解决此问题的高性能解决方案?