对于大于16mb的文件,使用pymongo和gridfs从MongoDB检索文件

对于大于16mb的文件,使用pymongo和gridfs从MongoDB检索文件,mongodb,pymongo,azure-cosmosdb,gridfs,gridfs-stream,Mongodb,Pymongo,Azure Cosmosdb,Gridfs,Gridfs Stream,因此,我正试图从python应用程序将大于16mb的数据上传到Azure Cosmos模拟器上的本地数据库上。上传是完美的,它创建了块和项目。我的问题是在下载上 path = "eye1.zip" fs = gridfs.GridFS(db) with open(path, 'rb') as file1: grid = fs.put(file1) eye = fs.get(grid) print(eye.read()) 在.read()命令中我一直遇

因此,我正试图从python应用程序将大于16mb的数据上传到Azure Cosmos模拟器上的本地数据库上。上传是完美的,它创建了块和项目。我的问题是在下载上

path = "eye1.zip"
fs = gridfs.GridFS(db)
with open(path, 'rb') as file1:
    grid = fs.put(file1)
    eye = fs.get(grid)
    print(eye.read())

在.read()命令中我一直遇到的错误是
pymongo.errors.ProtocolError:消息长度(12753158)大于服务器最大消息大小(4194304)
。那么,下载刚刚上传到设备上的数据的正确步骤是什么?既然gridfs假定允许您传输超过16mb的数据,为什么会出现此错误?

从函数中使用
batch\u size
参数获得非干预解决方案:

result = mdb['collection1'].find({}, batch_size=60)

我的收藏有v大唱片。使用batch_size=1似乎太低;100导致了同样的错误。经过一些试验后,我决定把这60个数字作为OptMinum。提取数据的速度没有受到影响。随后,我在多个集合中对数千条这样的记录运行了相同的命令,但没有遇到任何问题。

从函数中的:Use
batch\u size
参数获得了非干预解决方案:

result = mdb['collection1'].find({}, batch_size=60)

我的收藏有v大唱片。使用batch_size=1似乎太低;100导致了同样的错误。经过一些试验后,我决定把这60个数字作为OptMinum。提取数据的速度没有受到影响。随后,我在多个集合中对数千条这样的记录运行了相同的命令,没有遇到任何问题。

PyMongo驱动程序仅针对官方MongoDB服务器构建和测试。您的里程数将因CosmosDB等仿真环境而异。我在MongoDB上运行了你的代码,它运行正常。它在宇宙数据库上失败了。我建议你向微软的人寻求帮助,谢谢你的回答。通过在文件network.py的第198行的pymongo库中添加“max_message_size=50777216”,部分解决了该问题。pymongo驱动程序仅针对官方MongoDB服务器构建和测试。您的里程数将因CosmosDB等仿真环境而异。我在MongoDB上运行了你的代码,它运行正常。它在宇宙数据库上失败了。我建议你向微软的人寻求帮助,谢谢你的回答。通过在文件network.py的pymongo库的第198行添加“max_message_size=50777216”,部分解决了该问题。