MongoDB 新增文档时提示 “Size of BSON document exceeds maximum allowed”,怎么办?

阅读时长 5 分钟读完

背景

在使用 MongoDB 时,有时会遇到错误提醒:“Size of BSON document exceeds maximum allowed”。这个错误信息表示 BSON 文档的大小超过了MongoDB设定的最大值,导致无法插入该文档。

原因

在 MongoDB 中,每个文档(document)的大小不能超过 16 MB。实际上,在插入文档时,虽然没有为文档明确指定大小限制,但 MongoDB 会自动限制文档大小,防止出现过大的文档,从而导致服务器性能下降。

如果超过 16 MB(尤其是当文档中包含大量嵌套对象时),MongoDB 将无法处理这些文档,并提示错误信息:Size Of BSON Document Exceeds Maximum Allowed。

解决方法

方法一:使用 GridFS 存储大文档

GridFS 是 MongoDB 的一个文件存储机制,可以存储超过 16 MB 的大型文件(诸如图片、音频、视频等)。使用 GridFS,可以将大文档拆分为多个 BSON 文档存储。

以下是示例代码:

-- -------------------- ---- -------
-- ----
--- ------- -------

----- - ----------- - - ------------------
----- - -------- - - -----------------

----- --- - ---------------------------
----- ------ - --- ----------------

----- ----------------

-- ----------
----- ------ - ------------------ --------
----- -------------- - --- ----------
-------------------- - -- -- --
---------------------------
-------------------------

-- ---- ------------
----- ------ - --- --------------------------------- -
  ----------- ------
--

----- ------------ - -----------------------------------
---------------------------------

------------------------- -- -- -
  -------------------
--

方法二:拆分嵌套文档

如果无法使用 GridFS,则可以将过大的文档拆分为多个较小的文档。尤其是对于包含大量嵌套对象的文档,可以考虑拆分为多个文档来存储。

以下是示例代码:

-- -------------------- ---- -------
----- - ----------- - - ------------------

----- --- - ---------------------------
----- ------ - --- ----------------

----- ----------------

----- ---- - ------------------------------

-- ----------------
----- --- - ----- ------ -------------- ----- --------------- ---- -------------
----- --------- - ---- - ---- -- - --
--- ---------- - -------------------

----- ------------------ - -- -
  -- ------------ -- --
  ----- --- - --------------------------- ----------
  ----- --- - ------------------- ----
  ---------- - ---------------------

  ----- ---------------------- -----
-

----- --------------

方法三:重新设计数据模型

如果一篇文档确实需要存储大量数据,那么可以重新设计数据模型,将大型数据拆分并分别存储到多个文档中,并使用引用关系将它们关联。这样将会降低单个文档的大小并提高数据库操作性能。

以下是示例代码:

-- -------------------- ---- -------
----- - ----------- - - ------------------

----- --- - ---------------------------
----- ------ - --- ----------------

----- ----------------

-- ------
----- --------- - -------------------------------
----- ---------- - --------------------------------

-- --------
----- ---- - -
  ----- ------
  ---- ---
  -- -------------------- ------- --
  ------- ------------------------------- -------- --------- ------- ----------- ------ --------
-

-- --------
----- ----- - -
  -------- --------
  --------- ------- ----------- ------ -----
-

----- -------------------------

总结

当出现 MongoDB 提示错误“Size of BSON document exceeds maximum allowed”时,我们可以尝试使用 GridFS 存储大文档,或者拆分嵌套文档,或者重新设计数据模型来存储数据,以避免单个文档过大、性能下降等问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649a871748841e989476d094

纠错
反馈