c# - 使用 Any() 或 Contains() 时 mongo Db 不支持过滤器类型 - 是否有任何解决方法/修复?
问题描述
我已经看到此类问题的其他主题,但没有一个突出显示的答案对我有用。
引发错误的代码是这样的
List<Distribution> distributionPublishQueueList = (mongoDb.GetCollection<Distribution>().Find(Builders<Distribution>.Filter.And(
Builders<Distribution>.Filter.Where(x => x.Status == EntityStatus.Ok),
Builders<Distribution>.Filter.Where(x => x.IsActive),
Builders<Distribution>.Filter.Where(x => distinctDistributionIdInPublishQueueList.Contains(x.Id))))).ToList();
原来的代码是这样的:
List<Distribution> distributionPublishQueueList =
(await mongoDb.GetCollection<Distribution>()
.FindAsync(x => x.Status == EntityStatus.Ok
&& x.IsActive
&& distinctDistributionIdInPublishQueueList.Contains(x.Id)))
.ToList();
但我试图让它对 mongo 更友好。上面的两段代码都是一样的。列表 distinctDistributionIdInPublishQueueList 是分布 Id 的列表,它们是字符串。所以我试图找到ID在该列表+其他2个过滤器内的所有分布。当我在过滤器定义中使用 contains 时,它会引发不支持的过滤器异常。但是以下代码有效,因为我将列表放入本地内存并对其使用 LINQ:
List<Distribution> distributionPublishQueueList = (await mongoDb.GetCollection<Distribution>().FindAsync(x => x.Status == EntityStatus.Ok && x.IsActive)).ToList();
distributionPublishQueueList = distributionPublishQueueList.Where(x => distinctDistributionIdInPublishQueueList.Contains(x.Id)).ToList();
由于数据库中存在大量分布,我需要能够不在本地内存中执行此操作。是否有使用 Contains 和 Any 的解决方法。我也尝试过使用 MongoCSharpDriver In 语句和 Builders.Filter.In 和其他变体。
示例错误如下。这是使用的代码。
List<Asset> assetList = (await mongoDb.GetCollection<Asset>().FindAsync(
asset => extractAssetsFromContentService.ExtractAssetFromDraftContent(contentAsMarkdown)
.Any(extractedAsset => extractedAsset.AssetId == asset.Id))).ToList();
System.ArgumentException:不支持的过滤器:Any(value(System.Collections.Generic.List`1[DocWorks.Common.Transformation.Model.ExtractedAssetModel]).Where(({document}{AssetId} == {document}{_id} )))。
这将是相同的错误,除了在使用包含而不是任何时任何将是“包含”。与分发类似,我无法将资产带入本地内存。所有实体共享相同的基类,该基类存储 Id,如下所示:
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
解决方案
推荐阅读
- javascript - 如何在使用 Javascript 或 jQuery 的名称属性中使用选项属性中的选择?
- python - 如何使用 FLASK 将新行从 python 字符串渲染到 HTML 模板?
- ruby-on-rails - 如何在版本化的 Active 模型序列化程序中制作 RESTful 根键?
- python - 有没有办法检查共享远程服务器的可用计算能力?
- python-3.x - 在 Airflow 回填 Dag 中诱导睡眠延迟
- c++ - 如何像在 Python 中一样在 C++ 中实现 f-string?
- python - 检查代码库是否与特定版本的 python3 兼容
- github - 如果 repo 是组织存储库,AWS CodePipeline GitHub webhook 无法注册到 GitHub
- java - 为什么我的 Spring Boot 应用程序中出现“无法解析 ch.qos.logback:logback-core:1.2.3”?
- python - Numpy - 如何对子数组进行矢量化