Tôi có một vấn đề trong khi upserting để mongo db bằng cách sử dụng trình điều khiển C# chính thức.Upserting trong Mongo DB và các vấn đề Id
public abstract class AggregateRoot
{
/// <summary>
/// All mongoDb documents must have an id, we specify it here
/// </summary>
protected AggregateRoot()
{
Id = ObjectId.GenerateNewId();
}
[BsonId]
public ObjectId Id { get; set; }
}
Thực thể của tôi đã có id nhưng tôi phải tạo Id mongo cụ thể để làm việc, vì tất cả tài liệu trong bộ sưu tập nên có. Bây giờ sau đó tôi nhận được một thực thể mới trong hệ thống của tôi một Id Mongo mới được tạo ra và tôi nhận được mongo không thể thay đổi _id của một tài liệu cũ ngoại lệ. Có một số công việc xung quanh?
Để tôi mô tả thiết kế một chút. Tất cả các thực thể sẽ là được lưu trữ dưới dạng tài liệu được kế thừa từ AggregateRoot có thế hệ id trong đó. Mỗi tài liệu phụ có id của nó được tạo ra tự động và tôi không có vấn đề với điều này. Id trong AggregateRoot được giới thiệu để khắc phục sự cố khi truy xuất dữ liệu từ MongoCollection to List và thế hệ được giới thiệu để id-s khác nhau. Bây giờ chúng ta có thể di chuyển thế hệ id đó để lưu các phương thức vì thực thể mới để cập nhật có một thế hệ id mới. Nhưng nó có nghĩa là mọi dev trong nhóm không được quên tạo id-s trong kho lưu trữ có rủi ro. Nó sẽ đẹp hơn chỉ để bỏ qua id hơn ánh xạ từ Mongo nếu có thể và không có lớp AggregateRoot ở tất cả
Bạn đang lưu các đối tượng của mình như thế nào? Thuộc tính BsonId sẽ buộc MongoDB sử dụng trường đó làm id của bạn. –
Ý tưởng là dữ liệu đến từ một hệ thống bên ngoài để lưu trữ. Nó có id riêng của tôi, tôi phải lưu trữ. Và đây là một id giả vì lợi ích của Mongo. Mỗi tài liệu kế thừa từ AggregateRoot, do đó, điều này được tạo ra khi nhận được mọi đối tượng. Rõ ràng là tôi có thể nhận được cùng một dữ liệu nhưng id mongo được tạo khác nhau. Vì vậy, ngoại lệ xuất hiện –