【发布时间】:2015-10-05 13:07:48
【问题描述】:
我对 MongoDB 和 Java 还很陌生,我需要做一个非常简单的查询:获取插入到集合中的对象的最后一个文档。如果我使用 mongo shell,我使用 $last,然后我将 key valueand 时间戳字段用于获取最后一个文档,但使用 java 驱动程序(3.0.4)我没有发现任何关于 last 语句的信息
【问题讨论】:
我对 MongoDB 和 Java 还很陌生,我需要做一个非常简单的查询:获取插入到集合中的对象的最后一个文档。如果我使用 mongo shell,我使用 $last,然后我将 key valueand 时间戳字段用于获取最后一个文档,但使用 java 驱动程序(3.0.4)我没有发现任何关于 last 语句的信息
【问题讨论】:
不要依赖 MongoDB 总是按插入顺序返回文档。 MongoDB 不保证它会保持一致。当集合因删除和更新而变得碎片化时,MongoDB 可能会在中间某处插入一个新文档。
作为替代解决方案,您可以按时间戳字段或 _id(自动生成的 ObjectID 以创建它们的时间戳开始)对结果进行降序排序。降序索引可以大大提高性能。
顺便说一句:如果您这样做的原因是因为您想对刚刚在同一进程中插入的文档执行某些操作,那么这可能是一个非常脆弱的解决方案。当多个进程同时插入文档时,一个进程可能会得到另一个进程插入的文档。当您想要插入一个文档并维护一个句柄以便以后更改同一个文档时,请考虑通过创建 new ObjectID() 在 Java 中手动分配一个 _id。然后,您可以稍后使用该 ObjectID 来引用该文档。
【讨论】: