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")
}
关于这个结构的注释:
- 每张票都在不同的文档中 - 这使其具有可扩展性,因为集合中的文档数量没有限制。
- "created" 字段现在位于正确的日期字段中。这为您提供了更准确的可查询性。
- 您说过需要您的原始文档来存储 2016 年的所有门票。对这个新集合进行适当的查询将 return 为您提供 2016 年的所有门票,因此您不需要 需要将它们全部存储在一个文档中:
db.tickets.find({
"created" : {
$gte: ISODate("2016-01-01"),
$lt: ISODate("2017-01-01")
}
}
});
我想将票证详细信息存储在 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")
}
关于这个结构的注释:
- 每张票都在不同的文档中 - 这使其具有可扩展性,因为集合中的文档数量没有限制。
- "created" 字段现在位于正确的日期字段中。这为您提供了更准确的可查询性。
- 您说过需要您的原始文档来存储 2016 年的所有门票。对这个新集合进行适当的查询将 return 为您提供 2016 年的所有门票,因此您不需要 需要将它们全部存储在一个文档中:
db.tickets.find({
"created" : {
$gte: ISODate("2016-01-01"),
$lt: ISODate("2017-01-01")
}
}
});