Мне нужно запросить некоторые данные из базы данных с помощью драйвера C # mongodb и отфильтровать его. Я создаю фильтр и делаю запрос так
public async Task GetForexFeedForTimeSpan(long fromUTCUnixtime, long toUTCUnixtime, Action<List<SymbolData>> onComplete, string[] forSymbols, int limit = 0) {
List<SymbolData> list = new List<SymbolData>();
FilterDefinition<BsonDocument> filter
= Builders<BsonDocument>.Filter.Where(bson =>
forSymbols.Any(symbolName => bson["symbol"].AsString == symbolName) &&
bson["timestamp"] >= fromUTCUnixtime &&
bson["timestamp"] <= toUTCUnixtime
);
await GetCustomForexData(onComplete, filter, limit);
}
private async Task GetCustomForexData(Action<List<SymbolData>> onComplete, FilterDefinition<BsonDocument> filter, int limit = 0) {
List<SymbolData> list = new List<SymbolData>();
await m_SymbolsCollection
.Find(filter)
.Limit(limit)
.SortBy(bson => bson["timestamp"]).ForEachAsync(
bson => {
list.Add(SymbolData.FromBSON(bson));
});
onComplete?.Invoke(list);
}
Затем я называю это где-то следующим:
GetForexFeedForTimeSpan(fromUnixtime, toUnixtime, OnCompleteDelegate, new[]{ "EURUSD" });
Сама база данных действительно содержит «символьные» ключи. И если я изменю фильтр на это
FilterDefinition<BsonDocument> filter
= Builders<BsonDocument>.Filter.Where(bson =>
(string)bson["symbol"]== "EURUSD" &&
bson["timestamp"] >= fromUTCUnixtime &&
bson["timestamp"] <= toUTCUnixtime
);
Он будет работать и найти все документы с символом, равным «EURUSD». Но мне нужно передать кучу имен символов и выбрать любые совпадения
Почему он не работает с массивом? Или, может быть, кто-нибудь может посоветовать лучшее решение?
Мне нужно запросить некоторые данные из базы данных с помощью драйвера C # mongodb и отфильтровать его. Я создаю фильтр и делаю запрос так
public async Task GetForexFeedForTimeSpan(long fromUTCUnixtime, long toUTCUnixtime, Action<List<SymbolData>> onComplete, string[] forSymbols, int limit = 0) {
List<SymbolData> list = new List<SymbolData>();
FilterDefinition<BsonDocument> filter
= Builders<BsonDocument>.Filter.Where(bson =>
forSymbols.Any(symbolName => bson["symbol"].AsString == symbolName) &&
bson["timestamp"] >= fromUTCUnixtime &&
bson["timestamp"] <= toUTCUnixtime
);
await GetCustomForexData(onComplete, filter, limit);
}
private async Task GetCustomForexData(Action<List<SymbolData>> onComplete, FilterDefinition<BsonDocument> filter, int limit = 0) {
List<SymbolData> list = new List<SymbolData>();
await m_SymbolsCollection
.Find(filter)
.Limit(limit)
.SortBy(bson => bson["timestamp"]).ForEachAsync(
bson => {
list.Add(SymbolData.FromBSON(bson));
});
onComplete?.Invoke(list);
}
Затем я называю это где-то следующим:
GetForexFeedForTimeSpan(fromUnixtime, toUnixtime, OnCompleteDelegate, new[]{ "EURUSD" });
Сама база данных действительно содержит «символьные» ключи. И если я изменю фильтр на это
FilterDefinition<BsonDocument> filter
= Builders<BsonDocument>.Filter.Where(bson =>
(string)bson["symbol"]== "EURUSD" &&
bson["timestamp"] >= fromUTCUnixtime &&
bson["timestamp"] <= toUTCUnixtime
);
Он будет работать и найти все документы с символом, равным «EURUSD». Но мне нужно передать кучу имен символов и выбрать любые совпадения
Почему он не работает с массивом? Или, может быть, кто-нибудь может посоветовать лучшее решение?
00C # ,. сеть, MongoDB, LINQ запрос,