mongo文件中的BSON文档大小超过16 MB

时间:2017-03-07 18:00:38

标签: json mongodb size bson exceed

我想将票证详细信息存储在mongo文档中的数组中。它工作正常,直到文档大小达到16MB,之后我得到异常(更新后的结果文件大于16777216)并且程序突然终止。我不能拆分这个文件因为它存储了2016年以下的所有门票细节。

这里是我的文档结构。

{
   year:2016,
   purpose: ticketdetail,
   tickets:[
    {ticketid:001, desc:"xyz", created:20161231},
    {ticketid:002, desc:"xyz", created:20161231},
    {ticketid:003, desc:"xyz", created:20161231},
    .......
    .......
    {ticketid:00N, desc:"xyz", created:20161231},
   }]    
}

1 个答案:

答案 0 :(得分:1)

您需要将文档拆分为单独的文档,可能在不同的集合中。我推荐GridFS,因为你无法在GridFS blob中查询数据。

以下是建议的文档结构:

{
  _id: ObjectId("85bf0ef0b9692c0010978359"),
  "ticketid" : "001",
  "desc" : "xyz",
  "created" : ISODate("2016-12-31T00:00:00.000Z")
}
,
{
  _id: ObjectId("85bed4257726f90010d4e21f"),
  "ticketid" : "002",
  "desc" : "xyz",
  "created" : ISODate("2016-12-31T00:00:00.000Z")
}

关于这种结构的说明:

  1. 每个故障单都在不同的文档中 - 这使它具有可扩展性,因为集合中的文档数量没有限制。
  2. “已创建”字段现在位于正确的日期字段中。这为您提供了更准确的可查询性。
  3. 您说需要存储2016年所有门票的原始文件。对此新系列的合适查询将返回2016年的所有门票,因此您需要将它们全部存储在一份文件中:
  4. db.tickets.find({
        "created" : {
                $gte: ISODate("2016-01-01"),
                $lt: ISODate("2017-01-01")
            }
        }
    });