我正在寻找有关如何调试此内容的建议。
当我的一个文档在集合中变得太大时,整个文档将从集合中删除。我正在使用带有mongoid 2.2.6的heroku和使用MongoHQ的rails 3.0.20。我无法在本地重现问题。
两年前我们开始编写这段代码,我的一些学生慢慢地维护了这段代码。该网站类似于一个基本的博客网站,其中“帖子”将有“评论”。最初的设计版本已经过帖子,每个帖子都包含所有评论。由于版本控制,文档的大小可以非常快速地增长。我们尝试使用max_versions 5限制版本的大小,但我们仍然可以使用非常大的注释重现问题。可能是网站完全可用,但由于我们松开了整个文档(而不仅仅是评论),我想找到一个解决方案。如果我注意到评论是在文档中进行版本化的,我会更改设计以在帖子之外存储评论。
答案 0 :(得分:0)
正如评论所说,你的文件很可能变得太大了。从一段时间以来,所有MongoDB驱动程序都默认为已确认写入,如果无法存储或更新文档,在大多数情况下会给您一个例外。请检查您是否使用最新的驱动程序版本和/或启用了已确认的写入(有时也称为“安全”)。
我仍然认为你最好的办法是改变你的架构。如果您有未绑定的评论数量,那么即使没有版本控制,您也会遇到此问题。或者,您可以将较旧的评论和/或帖子存储在单独的集合中。
答案 1 :(得分:0)
可能会有所帮助的一些信息:
如果文件超过16MB限制,服务器将不会删除该文件;相反,它会引发错误(例如无效大小)。
据我所知,Mongoid和MongoDB Ruby驱动程序中没有任何内容可以在更新操作失败时删除文档。
如果应用程序删除文档然后为每次更新插入新文档,我建议修改应用程序以利用更新,并确保正确处理任何错误。