MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sự khác biệt giữa việc trang trí một thuộc tính trong C # với BsonRepresentation (BsonType.ObjectId) so với BsonId và ObjectId

1) Nếu bạn có một cột có tên Id, id or _id , trong TDocument được nhập mạnh của bạn lớp (loại mục trong một bộ sưu tập), sau đó là một cột có tên "_id" sẽ được tạo trong Mongo. Nó cũng sẽ tạo chỉ mục cho cột đó. Bạn gặp phải duplicate key error ngoại lệ nếu cố gắng chèn một mục có khóa đã tồn tại.

public ObjectId Id { get; set; } sẽ sử dụng trình tạo kiểu cho ObjectId và nó sẽ giống như _id: ObjectId("57ade20771e59f422cc652d9") .

public Guid _id { get; set; } sẽ sử dụng trình tạo Hướng dẫn để tạo ra smth như "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .

public int Id { get; set; } , public string id { get; set; } , public byte[] _id { get; set; } cũng sẽ là các cột chỉ mục sử dụng giá trị mặc định cho từng loại nếu không được chỉ định.

2) [BsonId] cung cấp cho bạn sự linh hoạt trong việc đặt tên chỉ mục đó theo bất kỳ cách nào bạn muốn. [BsonId] public Guid SmthElseOtherThanId { get; set; }[BsonId] public string StringId { get; set; } sẽ là các chỉ mục; public Guid SmthElseOtherThanId { get; set; }public string StringId { get; set; } sẽ không. mongodb sẽ vẫn sử dụng _id trong nội bộ.

Cùng một logic, public ObjectId SmthElseOtherThanId {get; set;} không có [BsonId] trang trí sẽ không phải là một cột chỉ mục.

3) [BsonRepresentation] cho phép bạn tung hứng giữa loại Mongo với loại .Net nội bộ, nếu có chuyển đổi giữa chúng .

[BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } giống với public ObjectId Id { get; set; } .

[BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } là khác nhau tuy nhiên. Mongo sẽ tự động tạo id đối tượng bởi chính anh ấy, tuy nhiên bạn sẽ có thể sử dụng chuỗi trong .net, truy vấn bộ lọc, v.v., vì có sự chuyển đổi giữa id đối tượng và chuỗi.

[BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } hoặc [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } sẽ không thành công với một ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer tin nhắn.

Nhưng [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } sẽ ổn thôi.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. findOne Subdocument ở Mongoose

  2. kết nối với mongodb cục bộ từ bộ chứa docker

  3. Đồng tiền trong gopkg.in/mgo.v2 (Mongo, Go)

  4. Tìm tài liệu có mảng không chứa tài liệu có giá trị trường cụ thể trong MongoDB

  5. MongoDB $ pow