Mongodb中的动态查询(C#Driver)用AND或OR加入动态标准 - 如何?

时间:2016-06-05 02:55:24

标签: c# mongodb mongodb-.net-driver

mongodb新手

C#MongoDb.Driver 2.2.3版

我需要根据用户输入动态构建查询(例如,他们想要搜索哪些数据字段以及每个数据字段的值)。查询需要允许运算符AND / OR。例如,在SQL中,此查询将如下所示:

Select * from products where (Brand='Gucci' AND Category='Bags') OR (Brand='Nike' AND Category='Clothing')

如何使用CSharp Driver在Mongodb中实现这一目标?

到目前为止,我已经通过Builder对象进行了测试和测试:

 var filter =
            Builders<Product>.Filter.Eq("Brand", "Gucci")
            & Builders<Product>.Filter.Eq("Category", "Bags");
             var products = productRepository.Collection.Find(filter).ToList();

但不确定如何添加语句的OR部分?

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

你可以使用|对于OR Documentation link

var builder = Builders<Product>.Filter;
var query = builder.Eq("Brand", "Gucci") & builder.Eq("Category", "Bags")
       | builder.Eq("Brand", "D&G") & builder.Eq("Category", "Accessory");
var products = productRepository.Collection.Find(query ).ToList();

答案 1 :(得分:0)

或者 你甚至可以用这种方式。

        var builder = Builders<Product>.Filter;
        var filter1 = builder.Eq("Brand", "Gucci") & builder.Eq("Category", "Bags");
         var filter2 =  builder.Eq("Brand", "D&G") & builder.Eq("Category", "Accessory");
         var query = builder.Or(filter1, filter2);

        var products = productRepository.Collection.Find(query).ToList();