首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚合中的Mongodb $count速度太慢,需要处理超过1个1mill。db中的文档

聚合中的Mongodb $count速度太慢,需要处理超过1个1mill。db中的文档
EN

Stack Overflow用户
提问于 2019-08-05 17:23:10
回答 1查看 126关注 0票数 0

我正在尝试过滤嵌入文档的数组,并在所有文档中获取count sum。

数据库中的数据结构。

代码语言:javascript
运行
复制
{
     name: String,
     transactions: [{
      type: String,
      isValid: String
     }]
}

我还对类型和isValid字段使用了多个索引。

这是我的聚合。

代码语言:javascript
运行
复制
 await Collection.aggregate([
  { '$unwind': '$transactions' },
  { '$replaceRoot': { newRoot: '$transactions' } },
  { '$match': { '$and': [ { type: { '$eq': 'Anything' } },
  { '$or': [ { isValid: { '$eq': true } }, { isValid: { '$eq': null } } ] } ] } },
  { '$count': "count"}] 

延迟约为15秒。

代码语言:javascript
运行
复制
 await Collection.aggregate([
  { '$count': "count"}]

在聚合延迟中仅使用$count是相同的约15秒。不知道它是怎么工作的。

收款单计数超过1个。而获取嵌入式数组的计数和大约需要15秒。有没有人可以建议如何优化查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-05 17:46:57

尝试实现以下内容:

代码语言:javascript
运行
复制
 await Collection.aggregate([
  {$group:{_id:null,count:{$sum:{$size:
                                {
                                    $filter: {
                                        input: "$transactions", as: "item",
                                        cond:
                                            {$and: [
                                                {$eq: ["$$item.type", "Anything"]},
            { '$or': [ { "$eq":["$$item.isValid",true]},{ "$eq":["$$item.isValid",null]}] }
                                            ]}
                                    }
                                }}}}}])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57355617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档