1)Id, id or _id
という名前の列がある場合 、強く入力されたTDocument
クラス(コレクション内のアイテムタイプ)、次に"_id"
という名前の列 Mongoで生成されます。また、その列のインデックスも作成されます。 duplicate key error
が発生します すでに存在するキーでアイテムを挿入しようとした場合の例外。
public ObjectId Id { get; set; }
ObjectId
の型ジェネレーターを使用します _id: ObjectId("57ade20771e59f422cc652d9")
のようになります。 。
public Guid _id { get; set; }
Guidジェネレーターを使用して"_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==")
のようなsmthを生成します 。
public int Id { get; set; }
、public string id { get; set; }
、public byte[] _id { get; set; }
指定されていない場合は、各タイプのデフォルトを使用するインデックス列にもなります。
2)[BsonId]
そのインデックスに任意の方法で名前を付ける柔軟性が得られます。 [BsonId] public Guid SmthElseOtherThanId { get; set; }
および[BsonId] public string StringId { get; set; }
インデックスになります。 public Guid SmthElseOtherThanId { get; set; }
およびpublic string StringId { get; set; }
しません。 mongodbは引き続き_id
を使用します 内部的に。
同じロジック、public ObjectId SmthElseOtherThanId {get; set;}
[BsonId]
なし 装飾はインデックス列にはなりません。
3)[BsonRepresentation]
Mongoタイプと内部.Netタイプを組み合わせることができます。それらの間に変換がある場合 。
[BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; }
public ObjectId Id { get; set; }
。
[BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; }
ただし、違います。 MongoはオブジェクトIDを自分で自動生成しますが、オブジェクトIDと文字列の間で変換が行われるため、.netで文字列を使用したり、クエリをフィルタリングしたりできます。
[BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; }
または[BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; }
ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer
で失敗します メッセージ。
ただし、[BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; }
大丈夫です。