gpt4 book ai didi

C# MongoDB 驱动程序 - 如何按数组和项目列表进行过滤

转载 作者:行者123 更新时间:2023-12-05 01:15:01 26 4
gpt4 key购买 nike

我想对字符串数组执行搜索并将其与字符串列表中的任何字符串进行比较。例如:

这是数据结构:

{
"CategoryIds": [ "A123", "B456", "C789" ]
}

这是搜索词:

List<string> search = new List<string> { "A123", "C789" };

我正在动态构建我的搜索查询,所以我已经为开始定义了这些:

var builder = Builders<Item>.Filter;
ar filters = Builders<Item>.Filter.Empty;

我已经尝试了以下所有方法,但都没有奏效:

使用ElemMatch

filters &= builder.ElemMatch(i => i.CategoryIds, id => search.CategoryIds.Any(i => i.Equals(id)));

使用相交

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);

但这似乎有点矫枉过正。有更简单的方法吗?

最佳答案

  • 要将包含值数组的字段与单个值匹配,您需要 AnyEq过滤器。
  • 要将单个字段值多个值 进行匹配,您需要 In过滤器。
  • 要将包含值数组的字段与多个值进行比较,您需要两者的组合,即 AnyIn过滤器:
var builder = Builders<Item>.Filter
filter = builder.AnyIn(item => item.CategoryIds, categoryIds)

关于C# MongoDB 驱动程序 - 如何按数组和项目列表进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com