我在Mongodb不太好。这是我使用它的第一个项目。我正在某种商店网站上工作。我们正在为mongodb使用C#和最新的C#驱动程序。我需要了解如何实现我的算法以根据用户的输入过滤产品。这是我的算法如何工作/应该工作的方式。
我会根据我的数据库中的零售商,颜色,类别名称检查每个单词。所以,这是怎么回事。
" T恤" - 好。它的类别名称显示为儿童,男性,女性的儿童类别,但因为我已经拥有" men"作为我的类别,我只是更深入地了解我的类别结构 - 现在我更新了我的类别我希望过滤它和男士类别下的T恤类别。
我不想忽视这个"蜘蛛侠"和"棉花"话。我想通过其产品名称中的单词覆盖率实际获取数据库顺序中的所有项目,因此我的预期结果(ofc与所有零售商,颜色等过滤器首先应用)是:
名称同时包含" spiderman"和"棉花"制品 名称中包含" spiderman"或"棉花"
我该怎么做?
答案 0 :(得分:1)
首先,您可以使用&
operator组合多个过滤器,如下所示:
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");
然后,您可以使用Regex
过滤其名称包含任何其余单词/所有其余单词的产品。
OR 搜索(名称包含“棉花”或“蜘蛛侠”)
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;
AND 搜索(名称包含“cotton”和“spiderman”)
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;