Shi*_*ibu 1 mongodb mongodb-query aggregation-framework
[
{
$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' } } },
]
Run Code Online (Sandbox Code Playgroud)
由于记录数 ($_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,
},
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |