是否有MongoDB最大bson大小?

问题描述:

我正在处理的文档非常大。它从一个非常长的调查中收集用户输入(如调查猴子)并将答案存储在一个mongodb数据库中。是否有MongoDB最大bson大小?

我意料之中收到以下错误

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 } 
}); 

数据字段的一个例子的结构:你应该使用gridfs

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

你可以发布一个文件的例子吗?只是显示结构的一个子集,这将有助于诊断。 –

+0

如果没有一些背景知识,这真的很难说。请给我们一些额外的细节?你需要搜索所有字段的能力吗?是否需要单个文档的原子更新? – zero323

+0

@TomSwifty我添加了一些更多的细节。我不需要搜索存储所有信息的数据字段。 – bejm

你可以做的一件事是建立你自己的mongoDB :-)。 Mongodb是一个开放的source,并且对文档大小的限制是强制执行better schema design的任意。您可以修改this line并为自己构建。小心这个。

最直接的想法是每个小问题在一个不同的文件与一个字段引用其父。

另一种想法是限制父文件的数量。比方说,你是限制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,你可以确保你将在16 MB BSON的。并且为了读取整个调查,您可以选择

db.coll.find({id: the Id you need})然后将整个调查结合在应用程序级别上。另外不要忘记在id上确保索引。

尝试不同的事情,对您的数据做一个基准测试,看看有什么适合您的。

+1

我想我将不得不与你提到的 - “在不同文件中的每个小问题” – bejm

+0

有趣的解决方案的大小限制,虽然“与大国来承担巨大的责任”! – EmptyArsenal

+0

这实际上不会解决尺寸问题,因为数据字段实际上比blob格式要大,解决方法是将问题归因于问题集合 – Sammaye

。它允许您将文档以块存储。这里是链接:http://docs.mongodb.org/manual/reference/gridfs/

+3

Gridfs在这里不是一个好主意,通过索引 – Sammaye

+0

Per @ bejm的评论来搜索这些文档是不可能的,他们不会做任何搜索。 – EmptyArsenal

+0

这取决于需求是什么,他期待什么样的表现,但是关于速度挑战的好处。 – EmptyArsenal