Linq:获取mongodb排序的所有文档

时间:2017-10-10 09:38:45

标签: mongodb linq mongodb-query

这是我的文件:

{
 "BusinessCode": "8545",
 "CreationDateTime": "/Date(1487417012464)/",
 "DeviceId": "",
 "Distributions": null,
 "EventData": [
      {
       "Children": null,
       "Key": "LogID",
       "Value": "496a506b4301"
      }
 ],
 "EventId": "events.login",
 },...

如何通过linq排序将所有文档都收集到我的收藏中?

这是我之前的查询:

var messagess = GetDbMongo().GetCollection<Message>(DB_COLLECTION_MESSAGES)
                .Find(Builders<Message>.Filter.And()).Sort(sortt).Limit(count <= 0 ? 10 : count).ToList();

2 个答案:

答案 0 :(得分:1)

你可以试试这个。

var messagess = GetDbMongo()
                   .GetCollection<Message>(DB_COLLECTION_MESSAGES)
                   .FindAll()
                   .Sort(sortt)
                   .ToList();

答案 1 :(得分:1)

不确定我是否错了,但你对“by linq”排序的想法是错误的。使用Linq进行排序是在内存中完成的。使用OrderBy将导致整个集合被立即枚举,这是非常糟糕的。相反,使用Mongo为您进行排序。这将更快,您将使用服务器资源,而不是您的应用程序。但似乎你已经在使用.Sort on the Collection所以..不确定你真正想要的是什么。

但是,您可以通过执行以下操作重新编写代码以使用Mongo进行排序:

var collection = GetDbMongo().GetCollection<Message>(DB_COLLECTION_MESSAGES); 

// Empty filter to get all records
var emptyFilter = Builders<Message>.Filter.Empty;

// Choose which field of Message type you want to sort for
var sort = Builders<Message>.Sort.Ascending(p => p.Name);

var messagess = collection.Find(emptyFilter)
    .Sort(sort)
    .Limit(count <= 0 ? 10 : count)
    .ToList();

如果您不熟悉Linq运营商如何处理“懒惰”,这是Jon Skeet的一篇好文章:Just how lazy are you?