Prima di tutto, puoi combinare più filtri utilizzando &
operatore
così:
var builder = Builders<Product>.Filter;
FilterDefinition<Product> filter = builder.Empty;
filter &= builder.Eq("Color", "blue");
filter &= builder.Eq("Retailer", "adidas");
filter &= builder.Eq("Category", "men");
Quindi, puoi utilizzare Regex
per filtrare i prodotti i cui nomi contengono eventuali parole di riposo/tutte le parole di riposo.
OPPURE cerca (il nome contiene "cotone" OPPURE "uomo ragno")
var restWords = new string[] { "cotton", "spiderman" };
var orReg = new System.Text.RegularExpressions.Regex(string.Join("|", restWords));
filter &= builder.Regex("Name", BsonRegularExpression.Create(orReg));
List<Product> filteredList = products.Find(filter).ToListAsync().Result;
E cerca (il nome contiene "cotone" E "uomo ragno")
foreach (var word in restWords)
{
filter &= builder.Regex("Name", BsonRegularExpression.Create(new System.Text.RegularExpressions.Regex(word)));
}
List<Product> filteredList = products.Find(filter).ToListAsync().Result;