【问题标题】:How to find newest document in Mongo Collection (C#)如何在 Mongo Collection (C#) 中查找最新文档
【发布时间】: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&lt;Score&gt;(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&lt;Score&gt;(),我会阻止将整个列表复制到内存中,对吗?
  • 有点。使用 linq 会有点不同: var game = _collection.AsQueryable().OrderByDescending(x => x.When).FirstOrDefault();

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

一种可能的解决方案是创建一个集合来存储集合中最后插入的 _id 值,并在需要获取最新文档时查询该值。

正如我所说,这是一种可能的解决方案,我确信它会起作用,但可能不是最佳解决方案,这取决于您的文档结构等。

我使用这个解决方案来做 autoinc 字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2015-12-22
    相关资源
    最近更新 更多