ObjectId (オブジェクトID)
最終更新:2026-10-09
ObjectId (オブジェクトID)
ObjectId は MongoDB のデフォルトの _id 型です。12バイトの一意な識別子で、4バイトのタイムスタンプ + 5バイトのランダム + 3バイトのカウンタで構成されます。_id なしでドキュメントが挿入されると自動生成され、分散システム全体で一意であり、作成時刻を埋め込んでいます(取り出し可能)。
| カテゴリ | BSON 型 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
// 自動生成
{ _id: ObjectId("64c8a1b2f3d4e5a6b7c8d9e0") }
// タイムスタンプを取得
ObjectId("...").getTimestamp()
戻り値:ObjectId インスタンスを返します。24 桁の16進文字列として表示されます
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// ObjectId: 挿入後に確認する
const oid = ObjectId()
print(oid.getTimestamp()) // 作成時刻
出力:
2026-09-25T08:30:00Z
📌 注意事項
- 12バイト = 4バイトのUnixタイムスタンプ + 5バイトのランダム + 3バイトのカウンタ
- ObjectId はおおよそ単調増加。_id でのソートは挿入順に近い
- 文字列表現は24桁の16進数
- getTimestamp() で作成時刻を取り出せる
🏷️ 関連タグ
💡 関連ケース
ドキュメントとBSON:MongoDBデータの基礎
ドキュメントの挿入:MongoDBの作成操作をマスターする
Mongoose応用パターン:パフォーマンスと柔軟性
Mongooseスキーマ設計と埋め込み vs 参照
Mongooseバリデーションとミドルウェア
📚 関連チュートリアル
❓ よくある質問
Q_id にオートインクリメントの整数を使えますか?
A使えます。挿入時に _id を手動で指定します。ただしオートインクリメント整数は分散書き込みでは調整が必要です。ObjectId はまさにそれを避けるために存在します。
QObjectId の文字列はどんな形式ですか?
A24文字の16進数です。例: 64c8a1b2f3d4e5a6b7c8d9e0。2文字が1バイトに対応します。
QObjectId は時刻でソートできますか?
Aおおよそできます。最初の4バイトがタイムスタンプなので、_id でのソートは挿入順にほぼ従いますが、厳密な時刻ではありません。