首页 > 解决方案 > C# 中的多个 MongoDb 过滤器

问题描述

为了在 C# 中处理多个 MongoDb 过滤器,我编写了以下方法;

        public string MultipleFilters(string collectionName, Dictionary<string, string> dictFilters)
        { 
            var filter = Builders<BsonDocument>.Filter.Eq("", "");

            foreach (KeyValuePair<string, string> entry in dictFilters)
            {
                filter = filter & Builders<BsonDocument>.Filter.Eq(entry.Key, entry.Value);
            }

            var collection = this.database.GetCollection<BsonDocument>(collectionName);           
            var document = collection.Find(filter).First();

            return document.ToJson();
        }

但它会抛出错误:

System.InvalidOperationException: 'Sequence contains no elements'

标签: c#mongodbmongodb-.net-drivermongodb.driver

解决方案


Builders<BsonDocument>.Filter.Eq("", "")是一个有效的 MongoDB 过滤器,它尝试查找具有空键和空值的文档(示例),

最好改为使用Builders<BsonDocument>.Filter.Empty

此外,您正在运行.First()after.Find()方法,因此您假设始终至少有一个值。如果您想在出现问题时被抛出,那很好,Sequence contains no elements但是您可以尝试通过使用更优雅地处理它.FirstOrDefault()


推荐阅读