"offset" 的值超出范围。它必须是 >= 0 && <= 17825792

The value of "offset" is out of range. It must be >= 0 && <= 17825792

    You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
 RangeError [ERR_OUT_OF_RANGE]: The value of "offset" is out of range. It must be >= 0 && <= 17825792. Received 17825796
     at Buffer.write (buffer.js:1019:5)
     at serializeObjectId (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:274:14)
     at serializeInto (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:935:17)
     at serializeObject (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:347:18)
     at serializeInto (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:727:17)
     at serializeObject (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:347:18)
     at serializeInto (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/parser/serializer.js:941:17)
     at BSON.serialize (/home/ubuntu/workspace/assurance-api/node_modules/bson/lib/bson/bson.js:64:28)
     at Msg.serializeBson (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/connection/msg.js:126:22)
     at Msg.makeDocumentSegment (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/connection/msg.js:118:33)
     at Msg.toBin (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/connection/msg.js:104:25)
     at MessageStream.writeCommand (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/cmap/message_stream.js:55:28)
     at Connection.write (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/cmap/connection.js:361:26)
     at _command (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/wireprotocol/command.js:128:10)
     at command (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/wireprotocol/command.js:28:5)
     at writeCommand (/home/ubuntu/workspace/assurance-api/node_modules/mongodb/lib/core/wireprotocol/write_command.js:47:3)

我一直在向我的快递后端发送一个带有数据和文件负载的 axios.post,我以 base64 格式捕获文件并弹出包含 "data/png base64;" 的前字母 当我尝试使用 base64 数据创建一个新实例时,我在尝试使用 mongoose 将文档保存到 mongodb 时收到以下错误,我徒劳地查找了这个错误,文件太大了吗?

您的 MongoDB 查询太大。当您的搜索或更新查询超过 17.825.792 字节时会发生这种情况。


对于有同样问题的人。我有一些额外的信息,经过一些测试我得出以下结论:

当您发出更改对象的 MongoDB 插入请求使其变得大于允许的最大大小 (16mb) 时,您将收到以下错误:

MongoError: BSONObj size: 20971588 (0x1400044) is invalid. Size must be between 0 and 16793600(16MB) First element: _id: ObjectId('60a277f50a5f8b012a761672')
    at Function.create ...
    {
  driver: true,
  index: 0,
  code: 10334
}    

当你做一个太大的 MongoDB query 时(就像在问题中)。您将看到以下错误:

RangeError [ERR_OUT_OF_RANGE]: The value of "offset" is out of range. It must be >= 0 && <= 17825792. Received 17825794
    at validateOffset (buffer.js:104:3)
    at Buffer.write (buffer.js:1055:5)
    ... {
  code: 'ERR_OUT_OF_RANGE'
}

这很重要,因为如果您执行例如插入或更新 10mb 数据的 upsert,您的查询将超过最大 ~17mb 的查询。 (不完全确定这是开发人员的意图)

最后,当您执行 超过最大查询大小但 确实 超过最大 BSON 文档大小的插入时,您将出现此错误:

MongoError: object to insert too large. size in bytes: 16777272, max size: 16777216
    at Function.create ...
     {
  driver: true,
  index: 0,
  code: 2
}

这是通过以下方式测试的:

  • 节点 v14.16.0
  • MongoDB节点模块v3.6.4

我希望这对解决这个问题的人有所帮助。