C# MongoDB 检查数组是否包含不区分大小写的字符串

C# MongoDB check if array contains strings case insensitive

我是 MongoDB 的新手,我正在尝试检查输入的字符串数组是否有任何值与任何文档中的嵌套字符串数组相匹配。

public IEnumerable<Cocktail> FindByIngredients(List<string> inputIngredients)
    {
        inputIngredients = inputIngredients.ConvertAll(ingredient => ingredient.ToLower());
        var filter = Builders<Cocktail>.Filter
            .AnyIn(x => x.IngredientList, inputIngredients);

        var cocktails = _collection.Find(filter).ToList();
       
        return cocktails;
    }

目前,我得到了以上,但它不区分大小写,我将如何使它不区分大小写?

JSON document from collection

您可以在执行查询时指定排序规则,从而改变 MongoDB 处理字符串的方式。有关详细信息,请参阅此 [link][1]。

比如想使用English-US作为locale进行查询,可以使用如下代码:

public IEnumerable<Cocktail> FindByIngredients(List<string> inputIngredients)
{
    inputIngredients = inputIngredients.ConvertAll(ingredient => ingredient.ToLower());
    var filter = Builders<Cocktail>.Filter
        .AnyIn(x => x.IngredientList, inputIngredients);

    var options = new FindOptions() 
    {
      Collation = new Collation("en_US")
    };
    var cocktails = _collection.Find(filter, options).ToList();
   
    return cocktails;
}

如果不指定排序规则,则使用简单的二进制比较,因此区分大小写。

如果要支持带有索引的查询,请记住索引还必须使用与查询时使用的排序规则相同的排序规则。 [1]: https://www.mongodb.com/docs/manual/reference/collation/