Это очень упрощенный пример, где у меня есть три коллекции классов (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
Как объединить коллекции MongoDB с использованием классов C# ⇐ C#
Место общения программистов C#
-
Anonymous
1749727486
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/77728716/how-to-aggregate-mongodb-collections-using-c-sharp-classes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия