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

BSON document size exceeds 16 MB in mongo document

我想将票证详细信息存储在 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},
   }]    
}

您需要将文档拆分成单独的文档,也许在不同的集合中。我 推荐 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. "created" 字段现在位于正确的日期字段中。这为您提供了更准确的可查询性。
  3. 您说过需要您的原始文档来存储 2016 年的所有门票。对这个新集合进行适当的查询将 return 为您提供 2016 年的所有门票,因此您不需要 需要将它们全部存储在一个文档中:
db.tickets.find({
    "created" : {
            $gte: ISODate("2016-01-01"),
            $lt: ISODate("2017-01-01")
        }
    }
});