当限制16 MB时,如何计算聚合的大小
我想为特定应用程序用户计算MongoDB中一些相互关联的文档的大小。 我正在执行聚合,最后对Bsonsize进行投影,但是当文档大小超过16 Mb 的限制时,此方法就无法正常工作。
我认为必须有更好的方法来解决这个问题,我要求经验丰富的开发人员,他们正在查看这个问题以共享更好的方法。
这就是我的聚合阵列的样子,
[
{
$match: {
user: userId
}
}, {
$lookup: {
from: 'anyvalidcollection1',
localField: 'validlocalfield1',
foreignField: 'validforeignfield1',
as: 'alias1'
}
}, $lookup: {
from: 'anyvalidcollection2',
localField: 'validlocalfield2',
foreignField: 'validforeignfield2',
as: 'alias2'
},
$lookup: {
from: 'anyvalidcollection3',
localField: 'validlocalfield3',
foreignField: 'validforeignfield3',
as: 'alias3'
},
$lookup: {
from: 'anyvalidcollection4',
localField: 'validlocalfield4',
foreignField: 'validforeignfield4',
as: 'alias4'
},
$lookup: {
from: 'anyvalidcollection5',
localField: 'validlocalfield5',
foreignField: 'validforeignfield5',
as: 'alias5'
}
}, {
$project: {
size: {
$bsonSize: '$$ROOT'
},
fileSize: '$file_data.size'
}
}, {
$unwind: {
path: '$fileSize',
includeArrayIndex: '0',
preserveNullAndEmptyArrays: false
}
}, {
$group: {
_id: 'sum',
totalSize: {
$sum: '$size'
},
totalFileSize: {
$sum: '$fileSize'
}
}
}
]
I want to calculate the size of a few interrelated documents in MongoDB for a particular application User.
I am performing aggregation and in the end doing projection on the bsonSize, but when the document size exceeds the limit of 16 MB, this approach is not working.
I think there must be some better way to solve this problem, I request to the experienced developer who is viewing this question to share a better approach.
This is what my aggregation array looks like,
[
{
$match: {
user: userId
}
}, {
$lookup: {
from: 'anyvalidcollection1',
localField: 'validlocalfield1',
foreignField: 'validforeignfield1',
as: 'alias1'
}
}, $lookup: {
from: 'anyvalidcollection2',
localField: 'validlocalfield2',
foreignField: 'validforeignfield2',
as: 'alias2'
},
$lookup: {
from: 'anyvalidcollection3',
localField: 'validlocalfield3',
foreignField: 'validforeignfield3',
as: 'alias3'
},
$lookup: {
from: 'anyvalidcollection4',
localField: 'validlocalfield4',
foreignField: 'validforeignfield4',
as: 'alias4'
},
$lookup: {
from: 'anyvalidcollection5',
localField: 'validlocalfield5',
foreignField: 'validforeignfield5',
as: 'alias5'
}
}, {
$project: {
size: {
$bsonSize: '$ROOT'
},
fileSize: '$file_data.size'
}
}, {
$unwind: {
path: '$fileSize',
includeArrayIndex: '0',
preserveNullAndEmptyArrays: false
}
}, {
$group: {
_id: 'sum',
totalSize: {
$sum: '$size'
},
totalFileSize: {
$sum: '$fileSize'
}
}
}
]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果管道中的文档为
> 16MB
$ bsonsize
也会抱怨文档大小,即使返回的文档为< 16MB。但是,解决此问题的一种简单方法是执行许多BSON尺寸,例如,如果您有许多字段,其中包含许多数据,
field1,field2,field2,field3
您可以做类似的bellow,
您也有5个查找看起来很多,如果您更改模式,也许可以减少它们。
If document in the pipeline is
> 16MB
$bsonSize
will complain of document size, even if returned documents are < 16MB.But a simple way to solve this is to do many bson sizes, for example if you have many fields with lots of data,
field1,field2,field3
You can do something like the bellow
You also have 5 lookups that looks alot, maybe you can reduce them, if you change your schema.