C # MongoDB драйвер, фильтр не работает, если я фильтрую значение массива

Мне нужно запросить некоторые данные из базы данных с помощью драйвера 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#,.net,mongodb,linq,request,

0

Ответов: 0

C # MongoDB драйвер, фильтр не работает, если я фильтрую значение массива

Мне нужно запросить некоторые данные из базы данных с помощью драйвера 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 запрос,
Похожие вопросы