我使用C#查询MongoDB的日志记录,我发现新的.NET v2驱动程序与旧的旧版本没有相同的api。仍然没有弄清楚如何查询最大值。
{
{ "user" , user },
{ "message" , message },
{ "dt" , EpochTimeStamp }
}
时间戳是一个unix Epoch(自1972年以来的秒数......)所以它是一个正整数。
我想通过查询数据库找到最新的记录(最大值为#34; dt"")(在SQL中这很容易)
public async void selectMostRecent(IMongoDatabase _database)
{
var collection = _database.GetCollection<BsonDocument>("conversations");
//this kind of filter works well and gives me all records 'from' a given time stamp
var filter = Builders<BsonDocument>.Filter.Gt("dt", from);
var result = await collection.Find(filter).ToListAsync();
//BUT.....
//How do I create a filter or a sort to return the record with max value of dt?
var RecordwitMaxDT = collection.Find<BsonDocument>(???)
//I've tried this sort, and variations but I cant get it to run.
var RecordwitMaxDT = col.Find<BsonDocument>("{}").SortByDescending("{dt}").SetLimit(1).FirstOrDefault();
}
答案 0 :(得分:0)
这可能不是表现明智的最佳方式,但您可以尝试:
(ID, Job)
答案 1 :(得分:0)
此代码是我的问题的解决方案
var builder = Builders<BsonDocument>.Sort;
var sort = builder.Descending("dt");
var CursorToResults = col.Find<BsonDocument>(new BsonDocument()).Sort(sort);
var RecordwithMax_dt_Value = await CursorToResults.FirstOrDefaultAsync();
问题在于有一个带有新API的.NET的新驱动程序,网络上的所有解决方案都已过时。
主要经验教训包括:a)创建子类型排序的构建器,b)预定义要注入到查找中的排序; c)在查找“选择所有记录”中需要空BsonDocument,它实际上是一个空白过滤。