1) Jika Anda memiliki kolom bernama Id, id or _id
, di TDocument
yang diketik dengan kuat class (tipe item dalam koleksi), lalu kolom bernama "_id"
akan dihasilkan di Mongo. Itu juga akan membuat indeks untuk kolom itu. Anda mendapatkan duplicate key error
pengecualian jika mencoba memasukkan item dengan kunci yang sudah ada.
public ObjectId Id { get; set; }
akan menggunakan generator tipe untuk ObjectId
dan akan terlihat seperti _id: ObjectId("57ade20771e59f422cc652d9")
.
public Guid _id { get; set; }
akan menggunakan generator Guid untuk menghasilkan sesuatu seperti "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==")
.
public int Id { get; set; }
, public string id { get; set; }
, public byte[] _id { get; set; }
juga akan menjadi kolom indeks menggunakan default untuk setiap jenis jika tidak ditentukan.
2) [BsonId]
memberi Anda fleksibilitas untuk menamai indeks itu dengan cara apa pun yang Anda inginkan. [BsonId] public Guid SmthElseOtherThanId { get; set; }
dan [BsonId] public string StringId { get; set; }
akan menjadi indeks; public Guid SmthElseOtherThanId { get; set; }
dan public string StringId { get; set; }
tidak akan. mongodb akan tetap menggunakan _id
secara internal.
Logika yang sama, public ObjectId SmthElseOtherThanId {get; set;}
tanpa [BsonId]
dekorasi tidak akan menjadi kolom indeks.
3) [BsonRepresentation]
memungkinkan Anda menyulap dengan tipe Mongo vs tipe .Net internal, jika ada konversi di antara keduanya .
Memiliki [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; }
identik dengan public ObjectId Id { get; set; }
.
Memiliki [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; }
berbeda namun. Mongo akan secara otomatis menghasilkan id objek sendiri, namun Anda akan dapat menggunakan string di .net, memfilter kueri, dll., karena ada konversi antara id objek dan string.
Memiliki [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; }
atau [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; }
akan gagal dengan ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer
pesan.
Tapi [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; }
akan baik-baik saja.