如何找到最大字段值的记录

本文关键字:记录 字段 何找 | 更新日期: 2023-09-27 18:04:13

我正在使用c#查询MongoDB的日志记录,我已经发现新的。net v2驱动程序没有与旧的遗留程序相同的api。仍然不知道如何查询最大值。

{ 
    { "user" , user },
    { "message" , message },
    { "dt" , EpochTimeStamp }
}

时间戳是unix Epoch(自1972年以来的秒数…),所以它是一个正整数。

我想通过查询数据库(这在SQL中很容易)找到最近的记录(最大值为"dt")

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();
}

如何找到最大字段值的记录

这可能不是性能方面的最佳方法,但您可以尝试:

var result = collection.OrderByDescending(m => m.YourTimeStampColumn).FirstOrDefault();

这段代码是我的问题的解决方案

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();

问题是。net有了一个新的驱动程序和一个新的api,网络上所有的解决方案都过时了。

吸取的关键教训包括a)创建子类型排序的构建器,b)预定义要注入查找的排序,c)需要在查找中使用空BsonDocument来"选择所有记录",它实际上是一个空白过滤器。

https://www.mongodb.com/blog/post/introducing-20-net-driver