2016-06-05 15 views
0

NewDynamische Abfrage in Mongodb (C# -Treiber) verbinden dynamische Kriterien mit AND oder OR - wie?

C# MongoDb.Driver Version 2.2.3

Ich habe eine Verpflichtung MongoDB dynamisch eine Abfrage basierend auf Benutzereingaben (zB welche Datenfelder, sie würden gerne auf den Aufbau suchen und die Werte von jedem). Die Abfrage muss den Operatoren AND/OR entsprechen. Zum Beispiel in SQL diese Abfrage aussehen würde wie folgt:

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

Wie kann ich dies in MongoDB mit CSharp Treiber erreichen?

Bisher über das Builder-Objekt gespielt und getestet habe ich:

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

aber nicht sicher, wie der OR Teil der Anweisung hinzufügen?

Jede Hilfe geschätzt.

Antwort

0

Sie können | verwenden für 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(); 
0

Oder können Sie auch auf diese Weise nutzen.

 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();