是否有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
}
你可以做的一件事是建立你自己的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
上确保索引。
尝试不同的事情,对您的数据做一个基准测试,看看有什么适合您的。
我想我将不得不与你提到的 - “在不同文件中的每个小问题” – bejm
有趣的解决方案的大小限制,虽然“与大国来承担巨大的责任”! – EmptyArsenal
这实际上不会解决尺寸问题,因为数据字段实际上比blob格式要大,解决方法是将问题归因于问题集合 – Sammaye
。它允许您将文档以块存储。这里是链接:http://docs.mongodb.org/manual/reference/gridfs/
Gridfs在这里不是一个好主意,通过索引 – Sammaye
Per @ bejm的评论来搜索这些文档是不可能的,他们不会做任何搜索。 – EmptyArsenal
这取决于需求是什么,他期待什么样的表现,但是关于速度挑战的好处。 – EmptyArsenal
你可以发布一个文件的例子吗?只是显示结构的一个子集,这将有助于诊断。 –
如果没有一些背景知识,这真的很难说。请给我们一些额外的细节?你需要搜索所有字段的能力吗?是否需要单个文档的原子更新? – zero323
@TomSwifty我添加了一些更多的细节。我不需要搜索存储所有信息的数据字段。 – bejm