1. 程式人生 > 其它 >Mongodb動態組合查詢條件

Mongodb動態組合查詢條件

private FilterDefinition<FacilityEntity> GetFilterDefinition(SearchFacilityRequest request)
        {
            var filterBuilder = Builders<FacilityEntity>.Filter;//條件過濾構建器
            var filters = GetFilters(request, filterBuilder);
            return filterBuilder.And(filters);
        }

        
private IEnumerable<FilterDefinition<FacilityEntity>> GetFilters(SearchFacilityRequest request, FilterDefinitionBuilder<FacilityEntity> filterBuilder) { var filters = new List<FilterDefinition<FacilityEntity>> { filterBuilder.Exists(
"Id") }; if (request.LayerIds.Any()) { filters.Add(filterBuilder.In("LayerId", request.LayerIds)); } if (request.AreaCodes.Any()) { filters.Add(filterBuilder.In("AreaCode", request.AreaCodes)); }
if (!string.IsNullOrEmpty(request.KeyWord)) { filters.Add(filterBuilder.Where(x => x.Name.Contains(request.KeyWord)));//模糊匹配 } return filters; }

Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同時滿足多個條件

Query.EQ("name", "a");//等於

Query.Exists("type", true);//判斷鍵值是否存在

Query.GT("value", 2);//大於>

Query.GTE("value", 3);//大於等於>=

Query.In("name", "a", "b");//包括指定的所有值,可以指定不同型別的條件和值

Query.LT("value", 9);//小於<

Query.LTE("value", 8);//小於等於<=

Query.Mod("value", 3, 1);//將查詢值除以第一個給定值,若餘數等於第二個給定值則返回該結果

Query.NE("name", "c");//不等於

Query.Nor(Array);//不包括陣列中的值

Query.Not("name");//元素條件語句

Query.NotIn("name", "a", 2);//返回與陣列中所有條件都不匹配的文件

Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//滿足其中一個條件

Query.Size("name", 2);//給定鍵的長度

Query.Type("_id", BsonType.ObjectId );//給定鍵的型別

Query.Where(BsonJavaScript);//執行JavaScript