mongo排序后排序限制

时间:2017-01-25 13:43:50

标签: c# mongodb

我希望按时间顺序从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);
    

    这个解决方案对我来说不起作用,因为它性能很差,因为它会两次查看数据库中的每个部分。 (一次用于计算,一次用于跳过)

  • 使用自己的算法(例如foreach-loop)对集合进行转换/排序。这个解决方案似乎不是最优雅的解决方案,也不具备高性能,因为排序将在客户端完成。

是否有解决此问题的高性能解决方案?

0 个答案:

没有答案