【发布时间】:2012-05-23 16:24:39
【问题描述】:
如何在 MongoCollection 中找到最新的文档?目前我正在执行以下操作,但无论如何它似乎都返回相同的值:
_collection.FindAllAs<Game>().SetSortOrder(SortBy.Descending("When")).FirstOrDefault<Game>();
文档的伪代码结构如下:
Game
{
DateTime When;
List<Score> Scores;
...other variables...
}
游戏总是通过Update.PushWrapped<Score>(Score s)顺序存储
我该如何改进?
【问题讨论】:
-
你能把你的文件的结构贴出来吗?另外,C# 和数据库中的“When”是什么类型?我还假设集合中有超过 1 个文档,并且集合中的文档比您继续收到的文档更新。
-
@CraigWilson 对不起。 "When" 是一个 DateTime 对象,因此被序列化。有多个文档。我已经更新了原来的问题。
-
你能从 shell 发出查询吗?还有,解释一下?例如db.(collectionname).find().sort({"When": -1});另外,在末尾添加说明: db.(collectionname).find().sort({"When": -1}).explain();
-
@CraigWilson 我认为这实际上可能是由于存储 DateTime 对象时缺乏精确性stackoverflow.com/questions/6036433/… 现在我强制提交之间的时间差异更大,这似乎可以工作。如果我然后添加
(...).AsQueryable<Score>(),我会阻止将整个列表复制到内存中,对吗? -
有点。使用 linq 会有点不同: var game = _collection.AsQueryable
().OrderByDescending(x => x.When).FirstOrDefault();
标签: c# mongodb mongodb-.net-driver