Я также пытался вручную зарегистрировать определение документа третьего уровня, но этот код может быть неверным. Однако необходимо ли регистрировать все документы ниже второго уровня для драйвера, чтобы его «обнаружить»?
Определения классов для документов:
Код: Выделить всё
public class LibraryUser
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } = ObjectId.GenerateNewId().ToString();
public required int UserId { get; set; }
public List Books { get; set; } = [];
public void AddBook(Book book)
{
Books.Add(book);
}
}
Код: Выделить всё
public class Book
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } = ObjectId.GenerateNewId().ToString();
public string BookTitle { get; set; }
public int Price { get; set; }
List Reviewers { get; set; } = [];
public void addReview(Review review)
{
Reviewers.Add(review);
}
}
Код: Выделить всё
public class Review
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } = ObjectId.GenerateNewId().ToString();
public string Reviewer { get; set; }
public int Grade { get; set; }
}
Код: Выделить всё
iMongoDatabase.CreateCollection("LibraryUsers");
LibraryUsersCollection = iMongoDatabase!.GetCollection("LibraryUsers");
LibraryUser userDoc = new() // First Level
{
UserId = 999999
};
Book book = new() // Second Level
{
BookTitle = "Old Yeller",
Price = 11
};
Review review = new() // Third Level
{
Reviewer = "Corin",
Grade = 55
};
book.addReview(review); // Add Review doc to Book
userDoc.AddBook(book); // Add Book doc to LibraryUser doc
LibraryUsersCollection.InsertOne(userDoc);
Код: Выделить всё
MongoDB.Bson.Serialization.BsonClassMap.RegisterClassMap(classmap =>
{
classmap.AutoMap();
classmap.MapMember(p => p.Reviewer);
classmap.MapMember(p => p.Grade);
});
Код: Выделить всё
db.LibraryUsers.find()
[
{
_id: ObjectId('69e22dcac06b765666fcda19'),
UserId: 999999,
Books: [
{
_id: ObjectId('69e22dcac06b765666fcda1a'),
BookTitle: 'Old Yeller',
Price: 11
}
]
}
]