gpt4 book ai didi

c# - 在 mongodb 中,获取第一个和最后一个文档的最有效方法是什么

转载 作者:可可西里 更新时间:2023-11-01 10:08:21 26 4
gpt4 key购买 nike

我有这样的文件:

class A
{
DateTime T;
...
}

我想找到最早和最新的文件。

这样做更好吗:

        var First   = db.Collection.AsQueryable().OrderBy(_ => _.t).FirstOrDefault();
var Last = db.Collection.AsQueryable().OrderByDescending(_ => _.t).FirstOrDefault();

或者,

        var First   = db.Collection.AsQueryable().OrderBy(_ => _.t).FirstOrDefault();
var Last = db.Collection.AsQueryable().OrderBy(_ => _.t).LastOrDefault();

        var C = db.Collection.AsQueryable().OrderBy(_ => _.t);
var First = C.FirstOrDefault();
var Last = C.LastOrDefault();

我想知道是否有任何底层实现会改变这些选项之间的速度?

我想知道排序是否已经完成一次,是否有可能将结果缓存起来并获取第一个和最后一个元素会更快?

最佳答案

Profiler当您不确定驱动程序语法时,它会成为您的 friend 。要为您需要在数据库上运行的所有查询启用日志记录,请执行以下语句:

db.setProfilingLevel(2)

然后检查在您需要运行的数据库上执行的最后一个查询:

db.system.profile.find().limit(1).sort( { ts : -1 } ).pretty()

因此对于第一个代码片段,您将获得:

"pipeline" : [ { "$sort" : { "t" : 1 }  },
{ "$limit" : 1 }
]

"pipeline" : [ { "$sort" : { "t" : -1 } },
{ "$limit" : 1 }
]

对于第二对,它打印

"pipeline" : [ { "$sort" : { "t" : 1 }  },
{ "$limit" : 1 }
]

并为 LastOrDefault 抛出 NotSupportedException在我的机器上,如果它适用于您的 MongoDB 驱动程序版本,您可以使用分析器检查生成的 MongoDB 语句

悬停在 c 上的最后一个在你的 Visual Studio 中打印

{aggregate([{ "$sort" : { "t" : 1 } }])}

但因为它的类型是 IOrderedQueryable<T>它只是不是具体化查询,因此当您运行 FirstOrDefault 时它将在数据库上执行生成与先前语句相同的聚合体。我也在这里收到 NotSupportedException。 Here您可以找到支持的 LINQ 运算符列表以及 LastLastOrDefault未实现,因此您需要降序排序。

关于c# - 在 mongodb 中,获取第一个和最后一个文档的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com