アンドレが言ったことを少し拡張するには:
ObjectIDタイムスタンプは秒単位であるため、タイムスタンプに同じ値(最初の4バイト)を使用して2つ(またはそれ以上)のObjectIDを簡単に作成できます。これらが同じマシン(マシンID-次の3バイト)で同じプロセス(PID-次の2バイト)によって作成された場合、それらを区別する唯一のものは、最後の3バイトの「inc」フィールドになります。最後に。
更新:2020年1月
この回答は引き続き人気があるため、少し更新する価値があります。 ObjectID仕様は、この回答が8年前に作成されてから進化し、タイムスタンプの後の5バイトは単純にランダムになり、衝突の可能性が大幅に減少します。最後の3バイトはまだ増分ですが、ランダムな値で初期化されて開始されるため、衝突の可能性が低くなります。 ObjectIDに含まれるコンテキストが少なくなりました(どこで、どのプロセスで生成されたかを簡単に判断することはできません)が、情報が意味のある方法で使用されておらず、IDのランダム化を改善するために廃止されたと思います。
更新の終了
完全な仕様については、こちらをご覧ください:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
その「inc」フィールドは、仕様が正しく実装されていると仮定すると、常に増分するフィールド(ソートが挿入/作成の順序であると合理的に期待できます)またはランダムな値(一意であるが順序付けられていない可能性があります)のいずれかです。 。 ObjectIDは、MongoDB自体ではなく、ドライバーまたはアプリケーション(または実際には手動)によって生成される可能性があるため、生成方法を完全に制御できない限り、上記のいずれかまたはすべてが適用される可能性があることに注意してください。
>