聚合中的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]}