fixtureやテストデータ用のMongoDB ObjectIdを採番する
シードデータには作成順にソートでき本物らしいIDが必要です。データベースなしで正しい24桁hexのObjectIdをまとめて採番します。
このガイドで使う道具
やりたいこと
fixtureやマイグレーションスクリプトを書いていて、本物としてパースされるObjectIdが50個必要 — 24桁hex、タイムスタンプ先頭、ほぼ単調。手でhexを打つと重複やソート順の壊れたIDが生まれます。
個数を決めて採番
個数を選んで(最大500)生成します。各IDは実際のレイアウトに従います。4バイトの秒タイムスタンプ・5バイトランダム・3バイトカウンタ — 本物同様に作成順でソートされます。
- 各IDには埋め込まれたタイムスタンプのデコード結果が表示されます — バッチが期待した秒にまたがるか確認できます。
- プロセスごとのカウンタリセットにより、別セッションで生成したIDは同じカウンタ開始値を共有することがあります — fixtureには問題なく、現実的な注意点として記載します。
本番には使わない
これらはテストとシード用の構造的に正しいIDです。本番ではドライバがプロセス単位の一意性保証付きでObjectIdを生成するため、実際のドキュメントIDをここで採番しないでください。