首页 > 解决方案 > CosmosDB Mongo v.4.0 抛出查询超出了 40 MB 的最大允许内存使用量

问题描述

我请求帮助,因为我在 CosmosDB 中的 MongoDb 服务器上仍然面临 40MB 问题,尽管我已将版本升级到 4.0(40MB 问题已在 3.6 中修复)。

我有一个使用 IMongoQerableInterface 构建的简单查询。

  protected Task<List<TEntity>> GetAllAsync(IMongoQueryable<TEntity> query)
    {
        return query.ToListAsync()
    }

来自存储库的上述方法稍后将在服务中等待。翻译后的查询如下所示:

{aggregate([{ "$match" : { "Foo" : "Bar", "IsDeleted" : false } }])}

我有大约 20k 个文档要使用“Bar”进行查询,我想使用我正在构建的查询来提取这些文档:

var result = await GetAllAsync(DbQueryableCollection
            .Where(x=> x.Foo == "Bar" && x.IsDeleted == isDeleted))

在我的本地机器上进行本地测试时,它工作正常。发布到 Azure AppService 时,我收到一个错误:

“命令聚合失败:查询超过了 40 MB 的最大允许内存使用量。请考虑添加更多过滤器以减少查询响应大小..”

当我执行相同的查询但不使用 IMongoQuerable 而是使用带有过滤器的 IMongoCollection.FindAsync() 作为参数时,它在 AppService 上运行良好。

下面工作正常。

var result =  await DbCollection.FindAsync(x => x.Model == model && x.IsDeleted == isDeleted);

我正在为 .Net v.2.12.3 使用 MongoDb.Driver(最新稳定版)我在集合上创建了通配符索引

为什么当 mongo 服务器升级到 4.0 时 AppService 上仍然出现 40 MB 问题,为什么它在本地工作?

为什么使用 IMongoQueryable 构造的查询在 AppService 中不起作用,但使用 IMongoQuerable 构造的查询可以正常工作并返回正确的结果?

标签: azureazure-cosmosdbazure-cosmosdb-mongoapi

解决方案


发布答案以结束此问题:

将端点从documents.azure.com 更新为mongo.cosmos.azure 修复此问题。


推荐阅读