C#MongoDB驱动程序,如果我按数组值过滤,过滤器将不起作用

时间:2018-07-24 16:49:47

标签: c# .net mongodb linq request

我需要使用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”的所有文档。但是我需要传递一堆符号名称并选择任何巧合

为什么它不能用于数组?也许有人可以建议更好的解决方案?

0 个答案:

没有答案