Драйвер MongoDB.NET не может создавать вложенные документы на 3 уровня глубиныC#

Место общения программистов C#
Anonymous
Драйвер MongoDB.NET не может создавать вложенные документы на 3 уровня глубины

Сообщение Anonymous »

Мне не удалось создать документы MongoDB, вложенные на третий уровень, с помощью драйвера .NET для MongoDB. Класс верхнего уровня имеет список объектов второго уровня. Класс второго уровня имеет список объектов третьего уровня. Однако операция вставки не может включить данные документа третьего уровня. Проект представляет собой консольное приложение, использующее MongDB.Driver v3.7.
Я также пытался вручную зарегистрировать определение документа третьего уровня, но этот код может быть неверным. Однако необходимо ли регистрировать все документы ниже второго уровня для драйвера, чтобы его «обнаружить»?
Определения классов для документов:

Код: Выделить всё

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);
Код регистрации класса Review — не помогло.

Код: Выделить всё

MongoDB.Bson.Serialization.BsonClassMap.RegisterClassMap(classmap =>
{
classmap.AutoMap();
classmap.MapMember(p => p.Reviewer);
classmap.MapMember(p => p.Grade);
});
Результирующие данные, просмотренные с помощью Mongosh:

Код: Выделить всё

db.LibraryUsers.find()
[
{
_id: ObjectId('69e22dcac06b765666fcda19'),
UserId: 999999,
Books: [
{
_id: ObjectId('69e22dcac06b765666fcda1a'),
BookTitle: 'Old Yeller',
Price: 11
}
]
}
]
Репозиторий GitHub

Вернуться в «C#»