小编Mat*_*per的帖子

使用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();
Run Code Online (Sandbox Code Playgroud)

原始代码是这样的:

List<Distribution> distributionPublishQueueList = 
   (await mongoDb.GetCollection<Distribution>()
       .FindAsync(x => x.Status == EntityStatus.Ok 
                    && x.IsActive
                    && distinctDistributionIdInPublishQueueList.Contains(x.Id)))
      .ToList();
Run Code Online (Sandbox Code Playgroud)

但是我试图使它对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();
Run Code Online (Sandbox Code Playgroud)

由于数据库中存在的分发数量,我需要不能在本地内存中执行此操作。是否有使用“包含”和“任何”的解决方法。我还尝试过使用MongoCSharpDriver In语句和Builders.Filter.In及其它变体。

错误示例如下。这是使用的代码。

List<Asset> assetList = (await mongoDb.GetCollection<Asset>().FindAsync(
asset => extractAssetsFromContentService.ExtractAssetFromDraftContent(contentAsMarkdown)
.Any(extractedAsset => extractedAsset.AssetId == asset.Id))).ToList();
Run Code Online (Sandbox Code Playgroud)

System.ArgumentException:不支持的过滤器:Any(value(System.Collections.Generic.List`1 [DocWorks.Common.Transformation.Model.ExtractedAssetModel])。Where(({{document} {AssetId} == {document} {_ id} )))。

这将是相同的错误,除了使用“ contains”而不是“ any”时“ Any”为“ Contains”。与分发类似,我无法将资产带入本地内存。所有实体共享相同的基类,该基类如下存储ID:

 [BsonRepresentation(BsonType.ObjectId)] …
Run Code Online (Sandbox Code Playgroud)

.net c# mongodb mongodb-query .net-core

5
推荐指数
1
解决办法
639
查看次数

标签 统计

.net ×1

.net-core ×1

c# ×1

mongodb ×1

mongodb-query ×1