2017-01-22 30 views
2

我想请教一下MongoDB的文档设计MongoDB的文件限制没有分割文件

我的文档,结构类似这样的

{ 
_id:123, 
data:[ 
    [ 
     { name: "andy" }, .... 
    ], 
    [ 
     { price : 1000 }, .... 
    ], 
    ..... 
]} 

我把1个交易到1号文件,这样便于管理数据。但我有一个问题,当数组内有很多数据,当它超过16MB时。

我不想更改或拆分数据到多个文件,因为我的应用程序已经依赖于它的索引在数据数组中,如果我做,其在应用方面的痛苦..

因为我使用聚合(分页,项目),没有性能问题,当涉及到数据检索。

我知道分割数据到新文档可以解决这个问题,我只是添加一个字段引用到新文档中。

但是,如果我不想分裂文件,是否posibble?

+0

这可能不是编译的语法,但尝试的东西沿着这些线路: 'collection.find({_ ID: “123”},{ “data.0.0.name”})限制(1)' 这应该只返回索引为0的数组的索引0处的数组的名称。如果要从所有数组中返回相同的索引,则必须多次使用投影。 [mongo文档](https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/) –

+0

感谢您的回答@Tomasz,对不起,如果我的问题不清楚,我的英语不好对不起。 –

+0

我的问题是,如果文件超过16MB以上?我想把所有的事务都放到1个文档中,我的应用程序总是只在这1个文档中推送数据或编辑。我的应用程序运行良好,当我推,当文件超过16mb,屁股!数组无法再被推送,因为这个限制 –

回答

0

在mongodb中,文档大小不能超过16 mb。所以你可以简单地将文档分成几部分。并且当您要从后端访问时,可以使用aggregation管道进行联合。 您可以使用“allowDiskUse”功能。

+0

你能举个例子吗?如何将文档分成几部分?你的意思是网格?还是其他什么? –

+0

我的意思是你可以单独保存数据而不保存在一个文件中。 –

+0

如果是这样,我应该改变我的后端应用程序逻辑,将其分成多个文件亚。感谢您回答Lakmal! –