Mongodb 在我的收藏中丢失文件

Mongodb 在我的收藏中丢失文件,mongodb,mongoid,Mongodb,Mongoid,我正在寻找关于如何调试这个的建议 当我的一个文档在集合中变得太大时,整个文档将从集合中删除。我在mongoid 2.2.6中使用heroku,在MongoHQ中使用rails 3.0.20。我无法在本地重现这个问题 我们两年前开始编写这段代码,我的一些学生一直在缓慢地维护它。该网站类似于一个基本的博客网站,其中一篇“帖子”将包含“评论”。最初的设计对帖子进行了版本控制,每个帖子都包含所有评论。由于版本控制,文档的大小可以快速增长。我们试图用max_versions 5限制版本的大小,但是我们仍然

我正在寻找关于如何调试这个的建议

当我的一个文档在集合中变得太大时,整个文档将从集合中删除。我在mongoid 2.2.6中使用heroku,在MongoHQ中使用rails 3.0.20。我无法在本地重现这个问题


我们两年前开始编写这段代码,我的一些学生一直在缓慢地维护它。该网站类似于一个基本的博客网站,其中一篇“帖子”将包含“评论”。最初的设计对帖子进行了版本控制,每个帖子都包含所有评论。由于版本控制,文档的大小可以快速增长。我们试图用max_versions 5限制版本的大小,但是我们仍然可以用非常大的注释重现问题。这个站点可能是完全可用的,但是由于我们丢失了整个文档(不仅仅是评论),我想找到一个解决方案。如果我注意到评论是在文档中进行版本控制的,我会将设计更改为在帖子之外存储评论。

正如一条评论所说,很可能是您的文档太大了。从一段时间以来,所有MongoDB驱动程序都默认为已确认写入,在大多数情况下,如果无法存储或更新文档,则会出现异常。请检查您是否使用最新的驱动程序版本和/或是否已启用确认写入(有时也称为“安全”)


我仍然认为你最好的选择是改变你的模式。如果您有大量未绑定的注释,那么即使在某些时候没有版本控制,您也会遇到这个问题。或者,您可以将较旧的评论和/或帖子存储在单独的集合中。

一些可能有用的信息:

  • 如果文档增长超过16MB限制,服务器将不会删除该文档;相反,它将引发错误(例如,无效大小)

  • 据我所知,如果更新操作失败,Mongoid和MongoDB Ruby驱动程序都不会删除文档

  • 如果应用程序删除一个文档,然后为每个更新插入一个新文档,我建议修改应用程序以利用更新,并确保正确处理任何错误


单个MongoDB文档不能超过16 MB,因此您可以检查接近该大小的文档。您还应该确保在创建和保存文档时使用的是安全写入,以便在发生任何错误时收到警报。