Я работаю над довольно большой базой MongoDB и задаюсь вопросом, есть ли более эффективный способ для некоторых запросов. Например, я храню много экземпляров Game
в БДЕ, где Game
класса выглядит следующим образом:MongoDB C# Драйвер соответственно. Linq: запрос для уникальных экземпляров и использование статических свойств AsQueryable
public class Game{
[BsonId]
public long ID { get; set; }
// ... some more properties
public List<Player> Players { get; set; }
}
, где каждый экземпляр игра имеет список Player
, который, в свою очередь, имеют некоторые свойства, как Name
.
В одной модели просмотра я хочу связать ComboBox
с именем всех игроков в базе данных, но помните, что один и тот же игрок мог сыграть много игр. Я загружаю их следующим образом:
private void LoadPlayersNames() {
var _l = StaticMongo.GetGames.SelectMany(n => n.Players).Select(n => n.Name);
PlayerNames = new ObservableCollection<string>(new HashSet<string>(_l));
}
И в статическом классе StaticMongo
У меня есть статический экземпляр MongoClient
и IMongoDatabase
, И я разоблачить GetGames
недвижимость в StaticMongo
следующим образом,
private readonly static IMongoDatabase _database;
public static IMongoQueryable<DetailedHand> GetGames {
get {
return _database.GetCollection<Game>("Games").AsQueryable();
}
}
Так чтобы сделать это более конкретным, следующие вопросы:
1: Я получаю уникальные имена игроков (через HashSet
), или есть лучший способ запроса уникальных имен в этом контексте. 2: Имеет ли статический экземпляр MongoDB вместе с выставлением коллекций баз данных AsQueryable недостатки?
Я знаю, что формула может быть немного основанной на мнениях, но я надеюсь получить некоторые альтернативные способы делать такие запросы, поскольку это не выглядит идеальным для меня способом.
Вы можете создать группу по имени игрока, а затем просто потянуть поле имени (вызов на стороне сервера MongoDb). Или вы можете вызвать Distinct() в Select. если вы хотите загрузить все эти данные из монго. –
Это действительно быстрее? Я имею в виду группировку по имени, а затем вытаскивание имени только звучит как больше работы, хотя я не знаю, как работает метод linq в фоновом режиме - вместо того, чтобы получать данные негруппированными, а затем создавать хешсет на именах - опять же не зная, как эффективный конструктор hasthset. – EluciusFTW
Вы пробовали добавить индексы ?? – user2527768