【问题标题】:Mongodb document limit without split document没有拆分文档的MongoDB文档限制
【发布时间】:2017-01-22 15:49:55
【问题描述】:

我想问一下mongodb文档设计的问题

我有这样结构的文档

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

我将 1 个事务放入 1 个文档中,因此易于管理数据。但是当数组中有很多数据时我遇到了一个问题,当它超过 16mb..

我不想将数据更改或拆分为多个文档,因为我的应用程序已经依赖于它在数据数组中的索引,如果我这样做,它在应用程序端会很痛苦..

由于我使用聚合(分页、项目),因此在数据检索方面没有性能问题。

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

但是如果我不想拆分文档,可以吗?

【问题讨论】:

  • 这可能不是可编译的语法,但请尝试以下方式:collection.find({_id:"123"}, {"data.0.0.name"}).limit(1) 这应该只返回位于索引 0 的数组的索引 0 的数组中的名称。如果你想从所有返回相同的索引你到达那里的数组,你必须多次使用投影。 mongo docs
  • 感谢@Tomasz 的回答,如果我的问题不清楚,对不起,我的英语不好抱歉。
  • 我的问题是,如果文档超过 16 mb 怎么办?我想将所有交易放入 1 个文档中,我的应用程序始终只在该 1 个文档中推送数据或编辑。当我推送并且文档超过 16mb 时,我的应用程序运行良好,bum!数组不能再被推送,因为这个限制
  • 哦,好吧,你必须把这个大文件分成小文件一次,或者使用 BLOB(强烈不推荐性能虎钳)。
  • 好的,好的,我现在明白了,感谢tomasz的回答

标签: mongodb aggregation-framework spring-data-mongodb


【解决方案1】:

在 mongodb 中,文档大小不能超过 16 mb。因此,您可以简单地将文档分成几部分。当您要从后端访问它时,您可以使用aggregation 管道联合起来。 您可以为此使用“allowDiskUse”功能。

【讨论】:

  • 你能给我举个例子吗?如何将文档分成几部分?你是说gridfs吗?还是别的什么?
  • 我的意思是你可以单独保存数据而不保存在一个文档中。
  • 如果是这样,我应该更改我的后端应用程序逻辑,将其分成多个文档。感谢拉克马尔的回答!
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 2013-10-10
  • 2018-09-11
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多