如何解决$ addToSet使用了过多的内存,无法溢出到磁盘内存限制:104857600字节
[
{
$match: {
$and: [
{
$or: [
{ assignee: 'eaa68f83-5024-4a8e-93f0-4b849d598585' },{ parent: 'eaa68f83-5024-4a8e-93f0-4b849d598585' },],},{ $and: [{ stage: 'COMPLETE' }] },{ $group: { _id: null,valueSet: { $addToSet: '$_id' } } },{ $project: { key: null,value: { $size: '$valueSet' } } },]
由于记录数($ _id)巨大,我遇到了错误。
$ addToSet使用了过多的内存,无法溢出到磁盘。内存限制:104857600字节
对此有什么解决办法吗?
解决方法
默认情况下,聚合管道中任何单个$ push或$ addToSet操作的内存限制为100MB。
这些限制已在MongoDB 3.6.17、4.0.14和4.2.3中添加,并带有更改默认值的选项。参见https://jira.mongodb.org/browse/SERVER-44869。
修改
考虑了片刻之后,我意识到最终结果是value
将是管道中文档的唯一_id
值的计数。可以通过不使用$ addToSet以更可扩展的方式获得。
与其将null
分组并把每个_id
添加到集合中,不如按_id
分组并计算结果中的文档数。
{ $group: { _id: '$_id' } },{ $count: 'value' },{
$project: {
key: null,value: 1,},
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。