MongoDB:如何过滤只包含特定字符的字符串?

问题描述:

我有一个mongo数据库,其中都存储了英文单词。 我想获得只包含特定字符的单词集合。 例如:在数据库中[ash,*,bash,has] 要求[灰]我想要[has,ash]作为输出。也许有一个快速的方法,我不必建立一些特殊的数据结构。 我将在c#中进行编码。MongoDB:如何过滤只包含特定字符的字符串?

如果您正在使用蒙戈的净驱动程序,然后它的LINQ实现应该是直截了当地使用。更多关于这里的信息MONGO LINQ然后就像一些普通的IEnumerable一样。

你的问题可能是使用正则表达式可以解决的,它可以在使用linq的Where子句中使用。正则表达式有一个很难调试的倾向,所以在这里找到正确的正则表达式是一个替代例子(它可以进一步优化)。

private void Test() 
    { 
     // fetching from database 
     // var samples = database.GetCollection<T>"collectionname").AsQueryable<Employee>(); 
     string[] samples = new[] {"nnn", "shhhh", "has", "s", "ash"}; 
     string chars = "ash"; 
     var matches = samples.Where(x => IsMatch(x, chars)); 
    } 

    private bool IsMatch(string sample, string matchChars) 
    { 
     if (sample.Length != matchChars.Length) 
      return false; 

     sample = matchChars.Aggregate(sample, (current, c) => current.Replace(c, ' ')); 
     return sample.Trim().Length == 0; 
    } 

试试这个作为查询...我正在搜索我的身份证,它包含52C。

{ "_id": { $regex: '.*\Q52C\E.*', $options: 'i' } } 

C#等效:

await collection.Find(new BsonDocument("_id", new BsonDocument { { "$regex", $".*\Q{YourString}\E.*" }, 
                   { "$options, "i" } })).ToListAsync();