Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json mongo文档中BSON文档大小超过16 MB_Json_Mongodb_Size_Bson_Exceed - Fatal编程技术网

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

Json mongo文档中BSON文档大小超过16 MB,json,mongodb,size,bson,exceed,Json,Mongodb,Size,Bson,Exceed,我想在mongo文档中的数组中存储票证详细信息。它工作正常,直到文档大小达到16MB,然后我得到异常(更新后生成的文档大于16777216),程序突然终止。我无法拆分此文档,因为它存储了2016年下的所有机票详细信息 下面是我的文档结构 { year:2016, purpose: ticketdetail, tickets:[ {ticketid:001, desc:"xyz", created:20161231}, {ticketid:002, desc:"x

我想在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”,
“描述”:“xyz”,
“已创建”:ISODate(“2016-12-31T00:00:00.000Z”)
}
,
{
_id:ObjectId(“85bed4257726f90010d4e21f”),
“ticketid”:“002”,
“描述”:“xyz”,
“已创建”:ISODate(“2016-12-31T00:00:00.000Z”)
}
关于这一结构的说明:

  • 每个票证位于不同的文档中—这使其具有可伸缩性,因为集合中的文档数量没有限制
  • “已创建”字段现在位于正确的日期字段中。这为您提供了更准确的查询能力
  • 您说过需要您的原始文档来存储2016年的所有门票。对此新集合的适当查询将返回2016年的所有票证,因此您无需将它们全部存储在单个文档中:
  • db.tickets.find({
    “已创建”:{
    $gte:ISODate(“2016-01-01”),
    $lt:ISODate(“2017-01-01”)
    }
    }
    });
    
    您需要将文档拆分为单独的文档,可能在不同的集合中。我不推荐GridFS,因为您不能在GridFS blob中查询数据

    以下是建议的文档结构:

    {
    _id:ObjectId(“85bf0ef0b9692c0010978359”),
    “ticketid”:“001”,
    “描述”:“xyz”,
    “已创建”:ISODate(“2016-12-31T00:00:00.000Z”)
    }
    ,
    {
    _id:ObjectId(“85bed4257726f90010d4e21f”),
    “ticketid”:“002”,
    “描述”:“xyz”,
    “已创建”:ISODate(“2016-12-31T00:00:00.000Z”)
    }
    
    关于这一结构的说明:

  • 每个票证位于不同的文档中—这使其具有可伸缩性,因为集合中的文档数量没有限制
  • “已创建”字段现在位于正确的日期字段中。这为您提供了更准确的查询能力
  • 您说过需要您的原始文档来存储2016年的所有门票。对此新集合的适当查询将返回2016年的所有票证,因此您无需将它们全部存储在单个文档中:
  • db.tickets.find({
    “已创建”:{
    $gte:ISODate(“2016-01-01”),
    $lt:ISODate(“2017-01-01”)
    }
    }
    });
    
    您可以将2016年的文档拆分为每个月的文档,否?@Veeram:这是每年的数据,我将在其中存储属于相应年份的票据,与我的每月和每日票据相同。没有拆分文档的任何想法???@Dickson您只需以某种方式拆分文档即可。16MB的限制(至少现在)不是可选的。@VinceBowdren谢谢,你对使用GridFS API存储大文档有什么想法吗?我们可以使用GridFS实现这一点,但我可以看到使用GridFS仅存储BLOB(多媒体)类型的示例:)您可以将2016年文档拆分为每个月的文档,否?@Veeram:这是每年的数据,我将在其中存储属于相应年份的票证,与我的每月和每日相同。没有拆分文档的任何想法???@Dickson您只需以某种方式拆分文档即可。16MB的限制(至少现在)不是可选的。@VinceBowdren谢谢,你对使用GridFS API存储大文档有什么想法吗?我们可以使用GridFS实现这一点,但我可以看到使用GridFS存储BLOB(多媒体)类型的示例:)谢谢,我已经拆分了文档,现在可以了!谢谢,我已经拆分了我的文档,现在可以了!