AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

GUID

In this guide, you can learn how to serialize globally unique identifiers (GUIDs), also known as universally unique identifiers (UUIDs).

Tip

ObjectId

In MongoDB applications, you can use the ObjectId type as a unique identifier for a document. Consider using ObjectId instances in place of GUIDs in MongoDB applications where possible.

GUID は 16 バイトの整数で、MongoDB ドキュメントのユニークな ID として使用できます。次のコード ブロックは、GUID の例を示しています。

00112233-4455-6677-8899-aabbccddeeff

MongoDB は元々、GUIDBsonBinaryData をサブタイプ3 の 値として表していました。サブタイプ3 はエンコード中に GUID のバイト順序を標準化しなかったため、さまざまなMongoDBドライバーは GUID を異なるバイト順でエンコードしました。

次のタブには、前述の GUID から BsonBinaryData サブタイプ 3 へのさまざまなドライバー エンコーディングが表示されます。

33221100-5544-7766-8899-aabbccddeeff
00112233-4455-6677-8899-aabbccddeeff
77665544-3322-1100-ffee-ddccbbaa9988

アプリケーション間で GUID バイト順序を標準化するために、すべてのMongoDBドライバーが同じ方法でエンコードする BsonBinaryData サブタイプ 4 を追加しました。アプリケーションで GUID を使用する場合は、BsonBinaryData サブタイプ 4 を使用して保存することをお勧めします。

注意

空の GUID

Guid.Empty 値を直列化する場合、 .NET/ C#ドライバーはこれらの値を設定されていない ID として扱います。設定されていない ID は、コレクションに挿入されると新しい GUID を受け取ります。次の例は、この動作を示しています。

var doc = new MyDocument { Name = "Test" }; // Id will default to Guid.Empty
collection.InsertOne(doc); // doc.Id will now contain a generated GUID, not Guid.Empty

Guid.Empty 値を持つドキュメントをIDとしてコレクションに保存するには、MongoCollectionSettingsオブジェクトを使用して自動ID生成をオフにします。次のコード例は、自動ID生成を無効にする方法を示しています。

var collectionSettings = new MongoCollectionSettings { AssignIdOnInsert = false }
var collection = database.GetCollection<MyDocument>("MyCollection", collectionSettings);

BsonBinaryData サブタイプの一覧については、 BsonBinarySubType 列挙型のAPIドキュメントを参照してください。

すべての新しい BsonBinaryData GUID にサブタイプ 4 を使用することを推奨していますが、古い MongoDB コレクションには、サブタイプ 3 を使用する GUID フィールドとサブタイプ 4 を使用する GUID フィールドが含まれている場合があります。これらの違いを考慮するために、.NET/C# ドライバーは個々のプロパティのレベルで GUID 直列化を処理します。

.NET/C# ドライバーは GuidRepresentation 列挙型を使用してさまざまな BsonBinaryData サブタイプを表します。次の表は、GuidRepresentation 列挙メンバーと、それに対応する BsonBinaryData サブタイプを示しています。

GuidRepresentation メンバー
BsonBinaryData サブタイプ

Standard

4

CSharpLegacy

3

JavaLegacy

3

PythonLegacy

3

Unspecified

該当なし

CSharpLegacyJavaLegacyPythonLegacy GUID 表現はすべて BsonBinaryData サブタイプ 3 と同じですが、使用するバイト順が異なります。

注意

レガシー GUID の構築

レガシー(サブタイプ 3)の GUID 値を構築するには、BsonBinaryData() コンストラクターを使用して GuidRepresentation.CSharpLegacy パラメータを渡し、レガシーGUID 型を明示的に指定する必要があります。次のコードは、 クエリフィルターで使用するレガシーGUID を作成する方法を示しています。

var guid = new Guid("00112233-4455-6677-8899-aabbccddeeff");
var legacyGuid = new BsonBinaryData(guid, GuidRepresentation.CSharpLegacy);
var filter = new BsonDocument("legacyGuidField", legacyGuid);

次のセクションでは、アプリケーションで GUID 表現を構成する方法について説明します。

.NET/ C#ドライバーを使用してC#クラスをドキュメントスキーマに自動マップピングする 場合は、GUIDプロパティに BsonGuidRepresentation 属性を追加して、その表現を指定できます。この属性は、 GuidRepresentation 列挙からの値を受け入れます。

次のコード例では、G プロパティの Standard GUID 表現を指定しています。

public class Widget
{
public int Id { get; set; }
[BsonGuidRepresentation(GuidRepresentation.Standard)]
public Guid G { get; set; }
}

独自の直列化コードを作成する場合は、GuidSerializer クラスを使用して個々の GUID 値を BSON フィールドとの間で直列化および逆直列化できます。ドライバーで GUID を正しく処理できるようにするには、 GuidSerializer を構築するときに GuidRepresentation パラメーターを使用します。

次のコードサンプルは、BsonBinaryData サブタイプ 4 を使用するプロパティを直列化するために GuidSerializer クラスのインスタンスを作成します。

var guidSerializer = new GuidSerializer(GuidRepresentation.Standard);

ほとんどの GUID が同じ表現を使用する場合は、 GuidSerializer をグローバルに登録できます。GuidSerializer を作成して登録するには、ブートストラップ フェーズなど、アプリケーションの早い段階で次のコードを実行します。

BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));

Tip

2 つの BsonBinaryData サブタイプを扱う場合は、グローバル シリアライザーをBsonGuidRepresentationプロパティ属性と組み合わせることができます。たとえば、最も一般的に使用される GUID サブタイプのグローバル シリアライザーを登録し、BsonGuidRepresentation 属性を使用して別のサブタイプの GUID プロパティを示すことができます。

重要

シリアライザーをグローバルに登録しない場合は、直列化可能なすべてのGUIDプロパティに BsonGuidRepresentation 属性を適用する必要があります。それ以外の場合、ドライバーはプロパティを直列化しようとしたときに例外をスローします。

ObjectSerializer を使用して、階層オブジェクトをサブドキュメントに直列化できます。これらのオブジェクト内の GUID を正しく直列化および逆直列化するには、ObjectSerializer の構築時に正しい GUID 表現を選択します。

次のコード サンプルは、サブタイプ 4 の GUID 表現の ObjectSerializer を作成する方法を示しています。

var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object));
var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard);

アプリケーションで ObjectSerializer を使用して GUID を直列化する場合は、アプリケーションの早い段階(ブートストラップ段階など)でもシリアライザーを登録する必要があります。登録したシリアライザーは、オブジェクト シリアライザーが必要で、特に指定されていない場合は常にグローバルに使用されます。

ObjectSerializer を登録するには、BsonSerializer.RegisterSerializer() メソッドに渡します。

var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object));
var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard);
BsonSerializer.RegisterSerializer(objectSerializer);

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。