2016-04-25 2 views
-1

У меня есть база данных mongo, в которой хранятся все английские слова. Я хочу получить набор слов, которые содержат только определенные символы. e.g .: в базе данных [ash, clash, bash, has] прошу [пепел] я хочу получить [есть, пепел] как выход. возможно, есть быстрый способ, что мне не нужно создавать некоторые специальные структуры данных. Я буду писать код в C#.MongoDB: Как фильтровать строки, содержащие только определенные символы?

ответ

0

Если вы используете драйвер .Net для Монго, то его реализация LINQ должна быть прямой, чтобы использовать. Более того, здесь MONGO LINQ Тогда это было бы (некоторые исключения) так же, как таргетинг на обычный IEnumerable.

Ваша проблема, вероятно, разрешима с использованием регулярного выражения, которое может использоваться в предложении Where с использованием linq. Регулярное выражение имеет тенденцию к отладке, так что пока вы не найдете правильное регулярное выражение, это альтернативный пример (его можно дополнительно оптимизировать).

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; 
    } 
0

Попробуйте это как запрос ... Я ищу свой ID, где он содержит 52C.

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

C# Эквивалент:

await collection.Find(new BsonDocument("_id", new BsonDocument { { "$regex", $".*\Q{YourString}\E.*" }, 
                   { "$options, "i" } })).ToListAsync(); 
Смежные вопросы