我需要使用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”的所有文档。但是我需要传递一堆符号名称并选择任何巧合
为什么它不能用于数组?也许有人可以建议更好的解决方案?