C# Mongo 查询效率

3
我有一个FilterDefinition构建,它将根据非空属性查找地址。
public static FilterDefinition<TU> FindPointByAddress<TU>(Address address)
{
    var filterBuilder = Builders<TU>.Filter;
    var filterItems = new List<FilterDefinition<TU>>();

    if (!String.IsNullOrWhiteSpace(address.Street))
    {
        filterItems.Add(filterBuilder.Eq("Address.Street", address.Street));
    }

    if (!String.IsNullOrWhiteSpace(address.City))
    {
        filterItems.Add(filterBuilder.Eq("Address.City", address.City));
    }

    if (!String.IsNullOrWhiteSpace(address.StateProvince))
    {
        filterItems.Add(filterBuilder.Eq("Address.StateProvince", address.StateProvince));
    }

    if (!String.IsNullOrWhiteSpace(address.PostCode))
    {
        filterItems.Add(filterBuilder.Eq("Address.PostCode", address.PostCode));
    }

    return filterBuilder.And(filterItems);
}

我认为这个查询有点复杂,是否有更好的方式来构建这种类型的查询或者这种方式是正确的?

1个回答

3
几天前我遇到了类似的情况。我写了一个简单的方法,它以字符串形式输入字段名和字段值。
public void AddEqualCompareFilter(string fieldName, string fieldValue)
    {
        if (String.IsNullOrEmpty(fieldValue) == false) {
            if (Filter != null) {
                Filter = Filter & Builders<TranslationsDocument>.Filter.Eq(fieldName, fieldValue);
            }
            else {
                FilterCount++;
                Filter = Builders<TranslationsDocument>.Filter.Eq(fieldName, fieldValue);
            }

        }
    }

我使用这段代码根据FilterCount进行决策:

if (FilterCount > 0) {
            Result = collection.Find(Filter).ToListAsync().GetAwaiter().GetResult();
            return true;
        }
        else {

            Result = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
            return true;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接