通过MongoDB c#驱动程序的多个过滤器

本文关键字:过滤器 驱动程序 MongoDB 通过 | 更新日期: 2023-09-27 17:54:23

运行时如何使用官方驱动程序生成过滤器?我想要得到包含特定用户id的联系人,并且可以过滤某些属性(包含一些文本)

当前代码不支持request.Filter > 1:

private FilterDefinition<Contact> BuildFilter(NgTableRequest request, string userId)
{
    var filters = new List<FilterDefinition<Contact>>
    {
        Builders<Contact>.Filter.Where(q => q.ContactUsers.Any(w => w.UserId == userId))
    };
    if (request.Filter != null && request.Filter.Any())
    {
        foreach (var reqFilter in request.Filter)
        {
            filters.Add(Builders<Contact>.Filter.Regex(reqFilter.Key, reqFilter.Value[0]));
        }
    }
    var result = Builders<Contact>.Filter.And(filters);
    return result;
}

通过MongoDB c#驱动程序的多个过滤器

使用以下代码检查生成的过滤器,并在另一个地方发现错误

    var documentSerializer = BsonSerializer.SerializerRegistry.GetSerializer<Contact>();
    var renderedFilter = result.Render(documentSerializer, BsonSerializer.SerializerRegistry).ToString();
    Trace.WriteLine("Filter: " + renderedFilter);