2017-03-07 5 views
0

mongo文書の配列にチケットの詳細を格納したいと思います。文書サイズが16MBに達するまでうまく動作します。その後、例外が発生します(更新後の文書は16777216より大きい)、プログラムは突然終了します。私はこの文書を分割することはできません.2016年のすべてのチケットの詳細が格納されています。mongo文書のBSON文書サイズが16 MBを超えています

ここに私の文書構造があります。

{ 
    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}, 
    }]  
} 
+0

あなたはなし、各月の文書に2016文書を分割することができますか? – Veeram

+0

@Veeram:これは毎年のデータで、私は毎月、毎日同じように、それぞれの年に該当するチケットを保管します。ドキュメントを分割せずに任意のアイデア? – Dickson

+0

@Dicksonあなたはちょっとドキュメントを何とか分割しなければなりません。 16MBの制限は(今は少なくとも)オプションではありません。 –

答えて

0

ドキュメントを別のドキュメントに分割する必要があります(別のコレクションなど)。私はではないでしょう。は、GridFSブロブ内のデータを照会することができないので、GridFSをお勧めします。ここで

は提案文書構造である。このような構造上の

{ 
    _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年のすべてのチケットを返すので、はありませんは、
db.tickets.find({ 
    "created" : { 
      $gte: ISODate("2016-01-01"), 
      $lt: ISODate("2017-01-01") 
     } 
    } 
}); 
+0

ありがとう、私は文書を分割しました。 – Dickson

+0

こんにちは@ディクソン、あなたが私の答えが役立つことを喜んで。役に立つと思われる回答をアップヴォートしたり受け入れたりすることを忘れないでください。 –

関連する問題