聚合中的Mongodb$计数太慢,使用超过1mill。数据库中的文档

聚合中的Mongodb$计数太慢,使用超过1mill。数据库中的文档,mongodb,optimization,count,bigdata,aggregate,Mongodb,Optimization,Count,Bigdata,Aggregate,我试图过滤嵌入文档的数组,并获得所有文档的计数和 数据库中的数据结构 { name: String, transactions: [{ type: String, isValid: String }] } 我还为type&isValid字段使用了多个indexex 这是我的聚合 await Collection.aggregate([ { '$unwind': '$transactions' }, { '$replaceRoot'

我试图过滤嵌入文档的数组,并获得所有文档的计数和

数据库中的数据结构

{
     name: String,
     transactions: [{
      type: String,
      isValid: String
     }]
}
我还为type&isValid字段使用了多个indexex

这是我的聚合

 await Collection.aggregate([
  { '$unwind': '$transactions' },
  { '$replaceRoot': { newRoot: '$transactions' } },
  { '$match': { '$and': [ { type: { '$eq': 'Anything' } },
  { '$or': [ { isValid: { '$eq': true } }, { isValid: { '$eq': null } } ] } ] } },
  { '$count': "count"}] 
延迟约15秒

 await Collection.aggregate([
  { '$count': "count"}]
在聚合延迟中仅使用$count是相同的~15秒。不知道它是怎么工作的

收款单。计数超过1毫米。获取嵌入式阵列的计数和大约需要15秒。 任何人都可以建议如何优化查询?

尝试实现以下功能:

 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]}] }
                                            ]}
                                    }
                                }}}}}])

请发布您收藏的样本文档。我有一个错误。使用此消息:$size的参数必须是数组,但类型为:nullFor$size需要一个数组才能运行您可以在$size中添加cond,使用{$cond:{if:{$lte:[$transactions,null]},然后:[],否则:{$size:{$filter:{input:$transactions,as:item,cond:{$and:[{$eq:[$$item.type,Anything]},{'$or':[{$eq:[$$item.isValid,true]},{$eq:[$$item.isValid,null]}