MongoDB聚合100MB限制:非关联$lookup数组按引用还是实际值算?
非关联$lookup场景的100MB聚合限制问题
问题描述
非关联$lookup场景下,聚合阶段中每个经过该阶段的文档都会被添加$lookup计算得到的同一数组。若该数组的实际大小超过100MB,是否会触发限制?数组属于引用类型,是按引用大小还是实际值大小计入100MB的聚合限制?
示例数据与聚合操作
插入absences集合数据
db.absences.insertMany( [ { "_id" : 1, "student" : "Ann Aardvark", sickdays: [ new Date ("2018-05-01"),new Date ("2018-08-23") ] }, { "_id" : 2, "student" : "Zoe Zebra", sickdays: [ new Date ("2018-02-01"),new Date ("2018-05-23") ] }, ] )
插入holidays集合数据
db.holidays.insertMany( [ { "_id" : 1, year: 2018, name: "New Years", date: new Date("2018-01-01") }, { "_id" : 2, year: 2018, name: "Pi Day", date: new Date("2018-03-14") }, { "_id" : 3, year: 2018, name: "Ice Cream Day", date: new Date("2018-07-15") }, { "_id" : 4, year: 2017, name: "New Years", date: new Date("2017-01-01") }, { "_id" : 5, year: 2017, name: "Ice Cream Day", date: new Date("2017-07-16") } ] )
聚合管道查询
db.absences.aggregate( [ { $lookup: { from: "holidays", pipeline: [ { $match: { year: 2018 } }, { $project: { _id: 0, date: { name: "$name", date: "$date" } } }, { $replaceRoot: { newRoot: "$date" } } ], as: "holidays" } } ] )
聚合输出结果
{ _id: 1, student: 'Ann Aardvark', sickdays: [ ISODate("2018-05-01T00:00:00.000Z"), ISODate("2018-08-23T00:00:00.000Z") ], holidays: [ { name: 'New Years', date: ISODate("2018-01-01T00:00:00.000Z") }, { name: 'Pi Day', date: ISODate("2018-03-14T00:00:00.000Z") }, { name: 'Ice Cream Day', date: ISODate("2018-07-15T00:00:00.000Z") } ] }, { _id: 2, student: 'Zoe Zebra', sickdays: [ ISODate("2018-02-01T00:00:00.000Z"), ISODate("2018-05-23T00:00:00.000Z") ], holidays: [ { name: 'New Years', date: ISODate("2018-01-01T00:00:00.000Z") }, { name: 'Pi Day', date: ISODate("2018-03-14T00:00:00.000Z") }, { name: 'Ice Cream Day', date: ISODate("2018-07-15T00:00:00.000Z") } ] }
问题解答
是否会触发100MB限制?
会触发。MongoDB聚合阶段对单个文档有100MB的硬限制,当添加大数组后的单个文档总大小超过100MB时,聚合操作会直接失败并抛出错误。按引用大小还是实际值大小计算?
按实际值的完整大小计入限制。即使MongoDB内部可能对重复数组做内存引用优化,但在统计文档大小时,会将数组的全部内容体积加到每个包含该数组的文档总大小中。也就是说,每个文档的总大小都会包含该大数组的完整体积,极易触发100MB限制。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

