当限制16 MB时,如何计算聚合的大小

发布于 2025-02-09 01:35:14 字数 1683 浏览 0 评论 0原文

我想为特定应用程序用户计算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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名的好友 2025-02-16 01:35:14

如果管道中的文档为> 16MB $ bsonsize也会抱怨文档大小,即使返回的文档为< 16MB。

但是,解决此问题的一种简单方法是执行许多BSON尺寸,例如,如果您有许多字段,其中包含许多数据,field1,field2,field2,field3

您可以做类似的bellow,

aggregate(
[{"$set": 
   {"size": 
     {"$add": 
       [{"$bsonSize": {"field1": "$field1"}},
        {"$bsonSize": {"field2": "$field2"}},
        {"$bsonSize": {"field3": "$field3"}}]}}}])

您也有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

aggregate(
[{"$set": 
   {"size": 
     {"$add": 
       [{"$bsonSize": {"field1": "$field1"}},
        {"$bsonSize": {"field2": "$field2"}},
        {"$bsonSize": {"field3": "$field3"}}]}}}])

You also have 5 lookups that looks alot, maybe you can reduce them, if you change your schema.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文