C# MongoDB 驱动程序 - 如何按数组和项目列表进行过滤
C# MongoDB Driver - How to filter by arrays and a list of items
我想对字符串数组执行搜索并将其与字符串列表中的任何字符串进行比较。例如:
这是数据结构:
{
"CategoryIds": [ "A123", "B456", "C789" ]
}
这是搜索词:
List<string> search = new List<string> { "A123", "C789" };
我正在动态构建我的搜索查询,所以我为开始定义了这些:
var builder = Builders<Item>.Filter;
ar filters = Builders<Item>.Filter.Empty;
我尝试了以下所有方法,但 none 有效:
使用ElemMatch
filters &= builder.ElemMatch(i => i.CategoryIds, id => search.CategoryIds.Any(i => i.Equals(id)));
使用Intersect
filters &= builder.Where(i => search.CategoryIds.Intersect(i.CategoryIds).Any());
唯一有效的是这个:
var categoryFilters = new List<FilterDefinition<Item>>();
foreach (string id in search.CategoryIds)
categoryFilters.Add(builder.AnyEq(i => i.CategoryIds, id));
if (categoryFilters.Any())
filters &= builder.Or(categoryFilters);
但这似乎有点矫枉过正。有更简单的方法吗?
我想对字符串数组执行搜索并将其与字符串列表中的任何字符串进行比较。例如:
这是数据结构:
{
"CategoryIds": [ "A123", "B456", "C789" ]
}
这是搜索词:
List<string> search = new List<string> { "A123", "C789" };
我正在动态构建我的搜索查询,所以我为开始定义了这些:
var builder = Builders<Item>.Filter;
ar filters = Builders<Item>.Filter.Empty;
我尝试了以下所有方法,但 none 有效:
使用ElemMatch
filters &= builder.ElemMatch(i => i.CategoryIds, id => search.CategoryIds.Any(i => i.Equals(id)));
使用Intersect
filters &= builder.Where(i => search.CategoryIds.Intersect(i.CategoryIds).Any());
唯一有效的是这个:
var categoryFilters = new List<FilterDefinition<Item>>();
foreach (string id in search.CategoryIds)
categoryFilters.Add(builder.AnyEq(i => i.CategoryIds, id));
if (categoryFilters.Any())
filters &= builder.Or(categoryFilters);
但这似乎有点矫枉过正。有更简单的方法吗?