Mongodb c#过滤器使用和或运算符

Posted

技术标签:

【中文标题】Mongodb c#过滤器使用和或运算符【英文标题】:Mongodb c# filter using and or operator 【发布时间】:2018-04-12 16:25:08 【问题描述】:

我在mongodb中有json文件

示例


 "SchemaName": "Intelligence",
 "SchemaDescription": "WindPower",
 "SchemaType": "WindPower",
 "SchemaTypeId": 1,
 "SchemaData": 
  "ProjectId": 1,
  "LastUpdated": "2016-07-02T19:27:28.000+0000",
  "ProjectName": "Zhonghuashan II",
  "Capacity": 49.0,
  "Technology": "Onshore",
   "Country":
          "CountryId":1,
          "CountryName":"UnitedKingdom",
          "CountryCode":"UK"
    
 

现在我正在根据搜索条件过滤数据

var filter = Builders<Schema>.Filter.Or(
                Builders<Schema>.Filter.Where(p => p.SchemaData.ProjectName.ToLower().Contains(searchCriteria.ProjectName.ToLower())),
                Builders<Schema>.Filter.Where(p => p.SchemaData.Technology.ToLower().Contains(searchCriteria.Technology.ToLower())),
                Builders<Schema>.Filter.Where(p => p.SchemaData.Country.CountryName.ToLower().Contains(searchCriteria.Country.ToLower()))
            );
            var list = await collectionHandler.ReadOnly<Schema>().FindSync(filter).ToListAsync();
            return list;

我需要添加条件

    searchCriteria.ProjectName ="" || searchCriteria.Technology="" || searchCriteria.Country = "" = return all records

    searchCriteria.ProjectName ="abc" and searchCriteria.Technology="xyz" || searchCriteria.Country = "" = return matched records

    searchCriteria.ProjectName ="abc" and searchCriteria.Technology="xyz" and searchCriteria.Country = "pqr" = return matched records

    searchCriteria.ProjectName ="" || searchCriteria.Technology="xyz" and searchCriteria.Country = "pqr" = return matched records

    searchCriteria.Technology="" ="abc" || searchCriteria.Technology="xyz" and searchCriteria.Country = "pqr" = return matched records

说搜索条件的任何属性都可以与搜索条件的其他属性结合使用 and 和 or

【问题讨论】:

【参考方案1】:

对我来说,我很乐意直接将过滤器作为字符串传递:

    FilterDefinition<BsonDocument> filter = @" ""Prop"":  $Or: [ $and: [...] , $and: [...] ]  ";
    var lst = collection.Find(filter);

您可以查看文档:https://docs.mongodb.com/v3.2/reference/operator/query/or/

【讨论】:

【参考方案2】:

我是这样做的:

将此答案作为here的基础

        var idFilter = new BsonDocument   "_id", new BsonDocument   "$regex", codeRegex ,  "$options", "i"    ;
        var nameFilter = new BsonDocument   "Name", new BsonDocument   "$regex", codeRegex ,  "$options", "i"    ;

        var filter = new BsonDocument("$or", new BsonArray  idFilter, nameFilter );

        var query = _collection.Find(filter)                
            .SortBy(c=>c.Id);
        return query.ToList();

【讨论】:

以上是关于Mongodb c#过滤器使用和或运算符的主要内容,如果未能解决你的问题,请参考以下文章

input框限制只能输入正整数,逻辑与和或运算

input框限制只能输入正整数,逻辑与和或运算

Lua里有没有逻辑运算 中的并和或的运算

html或者php中 input框限制只能输入正整数,逻辑与和或运算

SQL 逻辑运算符优先级:与和或

如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符