如何查找具有最大字段值的记录

时间:2015-07-22 23:29:06

标签: c# mongodb

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

2 个答案:

答案 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,它实际上是一个空白过滤。

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