MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perbedaan antara mendekorasi properti di C# dengan BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara melakukan yang berbeda secara efisien dengan banyak kunci?

  2. MongoDB $pesanBoleh

  3. Peningkatan Kerangka Agregasi MongoDB 2.6

  4. instal mongoDB (proses anak gagal, keluar dengan nomor kesalahan 100)

  5. Memformat ISODate dari Mongodb