2016-04-25 17 views
-1

私はすべての英語の単語が格納されているmongoデータベースを持っています。 特定の文字だけを含む単語の集合を取得したい。 例:データベース[ash、clash、bash、has] [ash]を要求しています。出力として[has、ash]を取得します。 おそらく速い方法があります、私はいくつかの特別なデータ構造を構築する必要はありません。 私はC#でコード化します。MongoDB:特定の文字のみを含む文字列をフィルタリングするには?

答えて

0

あなたはモンゴの.NETドライバを使用している場合は、そのLINQの実装が使用することをまっすぐにする必要があります。これについての詳細はこちらMONGO LINQ通常のIEnumerableをターゲットにするのと同じように(いくつかの例外があります)。

あなたの問題はおそらくlinqを使ってWhere節で使用できるregexを使って解決できます。正規表現はデバッグするのが難しい傾向があります。正しい正規表現が見つかるまで別の例があります(さらに最適化できます)。

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

これをクエリとして試してみてください...私は52Cが含まれているIDを検索しています。

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

C#の等価:

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