是否有MongoDB最大bson大小的解决方案?

是否有MongoDB最大bson大小的解决方案?,mongodb,Mongodb,我正在处理的文档非常大。它从一个非常长的调查(如survey monkey)中收集用户输入,并将答案存储在mongodb数据库中 我毫不奇怪地得到以下错误 Error: Document exceeds maximal allowed bson size of 16777216 bytes 如果我不能更改文档中的字段,我能做些什么吗?有没有办法压缩文档,通过删除空白或类似的内容 编辑 下面是文档的结构 Schema({ id : { type: Number, required: tr

我正在处理的文档非常大。它从一个非常长的调查(如survey monkey)中收集用户输入,并将答案存储在mongodb数据库中

我毫不奇怪地得到以下错误

Error: Document exceeds maximal allowed bson size of 16777216 bytes
如果我不能更改文档中的字段,我能做些什么吗?有没有办法压缩文档,通过删除空白或类似的内容

编辑

下面是文档的结构

Schema({
    id : { type: Number, required: true },
    created: { type: Date, default: Date.now },
    last_modified: { type: Date, default: Date.now },
    data : { type: Schema.Types.Mixed, required: true }
});
数据字段的一个示例:

{
    id: 65,
    question: {
        test: "some questions",
        answers: [2,5,6]
    }
    // there could be thousands of these question objects
}

您应该使用
gridfs
。它允许您将文档分块存储。以下是链接:

您可以做的一件事是构建您自己的mongoDB:-)。Mongodb是一个开放的应用程序,对文档大小的限制对于强制执行应用程序来说是相当随意的。您可以自己修改和构建它。小心这个

最直接的想法是将每个小问题放在不同的文档中,其中包含一个引用其父项的字段

另一个想法是限制父文件中的文档数。假设限制为N个元素,则父元素如下所示:

{
  _id : ObjectId(),
  id : { type: Number, required: true },
  created: { type: Date, default: Date.now },  // you can store it only for the first element
  last_modified: { type: Date, default: Date.now }, // the same here
  data : [{
    id: 65,
    question: {
        test: "some questions",
        answers: [2,5,6]
    }
  }, ... up to N of such things {}
  ]
}
通过修改数字N,您可以确保您的BSON容量为16 MB。为了阅读整个调查,你可以选择

db.coll.find({id:您需要的id})
然后在应用程序级别合并整个调查。另外,不要忘记在
id
上确定索引


尝试不同的方法,对您的数据进行基准测试,看看哪些方法适合您。

您能举一个文档的示例吗?只是显示结构的子集,这将有助于诊断。如果没有一些上下文,这真的很难说。可以给我们一些额外的细节吗?您需要搜索所有字段的能力吗?是否需要对单个文档进行原子更新?@TomSwifty我补充了一些详细信息。我不需要搜索存储所有信息的数据字段。不可能将每个问题都放在自己的文档中吗?你真的不想查询这些数据吗?你为什么要再次使用MongoDB?Gridfs在这里不是一个好主意,用indexesPer@bejm的评论搜索那些文档是不可能的,他们不做任何搜索。这取决于需要什么,以及他期望的性能,但是速度方面的挑战是好的。是的,澄清一下,他需要查询文档本身,gridfs不起作用。模式更改要比存储大量二进制文档要好得多。它几乎完全否定了使用MongoDB的价值。我想我将不得不同意你所说的——“不同文档中的每个小问题”的大小限制的有趣解决方案,尽管“强大的力量带来巨大的责任”!这实际上无法解决大小问题,因为数据字段实际上比blob格式的要大,解决方案是将问题分解到问题集合中。我只是想强调一下,mongodb是开源的,您可以随意修改它。但你肯定需要知道你在做什么。