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

时间:2016-04-25 18:14:52

标签: c# mongodb

我有一个mongo数据库,其中存储了所有英文单词。 我想得到一个只包含特定字符的单词集合。 例如:在数据库中[ash,clash,bash,has] 要求[灰]我想得到[有,灰]作为输出。 也许有一种快速的方式,我不必建立一些特殊的数据结构。 我将用c#编码。

2 个答案:

答案 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();

答案 1 :(得分:0)

如果您使用mongo的.Net驱动程序,那么其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;
    }