Как объединить коллекции MongoDB с использованием классов C#C#

Место общения программистов C#
Ответить
Anonymous
 Как объединить коллекции MongoDB с использованием классов C#

Сообщение Anonymous »

Это очень упрощенный пример, где у меня есть три коллекции классов (Team, лига , player ) в отдельных коллекциях в MongoDB. Я использую драйвер C# MongoDB в приложении .net 8 Blazor Server. < /P>
Данные для каждого из этих объектов могут быть обновлены независимо, и эти объекты могут использоваться в нескольких случаях других классов. Поэтому я пытаюсь избежать хранения всех данных в одном сборе документов для команды.IMongoCollection). Однако, когда я собираюсь извлечь в базу данных TeamData из базы данных, я бы хотел, чтобы это было полностью реализованным классом Team . Я ищу помощь в том, как использовать драйвер MongoDB C#, чтобы получить их из базы данных в качестве полностью реализованных классов. Все примеры, которые я видел, требуют много данных «магическая строка», вместо использования классов и данных класса, которые уже находятся в моем коде.public class Player
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public int Handicap { get; set; }
}

public class League
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

public string Name { get; set }
}

public class Team
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

public int Number { get; set; }

public League League { get; set; }

public Player Player1 { get; set; }

public Player Player2 { get; set; }
}

// This is how I am currently storing the data for the team in the database, where I have references to the other objects.

public class TeamData
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

public int Number { get; set; }

[BsonRepresentation(BsonType.ObjectId)]
public string LeagueId { get; set; }

[BsonRepresentation(BsonType.ObjectId)]
public string Player1Id { get; set; }

[BsonRepresentation(BsonType.ObjectId)]
public string Player2Id { get; set; }
}

public async Task GetAllTeams()
{
IMongoCollection teamCollection = Database.GetCollection("Teams");
IMongoCollection leagueCollection = Database.GetCollection("Leagues");
IMongoCollection playerCollection = Database.GetCollection("Players");

var result = teamCollection.FindAsync(_ => true).AggregateAsync(what needs to go here to make this work);

return result.ToList();
}
< /code>
Для контекста, вот как я делаю это сегодня, но это кажется очень многословным и неэффективным. < /p>
public override async Task GetAllAsync()
{
IMongoCollection teamCollection = Database.GetCollection("Teams");
IMongoCollection leagues = Database.GetCollection("Leagues");
IMongoCollection players = Database.GetCollection("Players");

var data = await teamCollection.FindAsync(_ => true);

List teams = [];

foreach (TeamData t in data.ToList())
{
teams.Add(new Team()
{
Id = t.Id,
Number = t.Number,
League = (await leagues.FindAsync(l => l.Id == t.LeagueId)).First(),
Player1 = (await players.FindAsync(p => p.Id == t.Player1Id)).First(),
Player2 = (await players.FindAsync(p => p.Id == t.Player2Id)).First(),
});
}

return teams;
}


Подробнее здесь: https://stackoverflow.com/questions/777 ... rp-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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