Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MongoDB上将文档插入集合时,如何处理文档大小超过16MB的错误_Mongodb_Python 2.7 - Fatal编程技术网

在MongoDB上将文档插入集合时,如何处理文档大小超过16MB的错误

在MongoDB上将文档插入集合时,如何处理文档大小超过16MB的错误,mongodb,python-2.7,Mongodb,Python 2.7,任何人都可以建议如何处理文档大小超过16MB的错误,同时将文档插入MongoDB上的集合。我有一些解决方案,比如GridFS。通过使用GridsFS可以处理这个问题,但我需要一个不使用GridFS的解决方案。有没有办法将文档缩小或拆分为子文档。如果是,我们如何实现 from pymongo import MongoClient conn = MongoClient("mongodb://sample_mongo:27017") db_conn = conn["test"] db_collect

任何人都可以建议如何处理文档大小超过16MB的错误,同时将文档插入MongoDB上的集合。我有一些解决方案,比如GridFS。通过使用GridsFS可以处理这个问题,但我需要一个不使用GridFS的解决方案。有没有办法将文档缩小或拆分为子文档。如果是,我们如何实现

from pymongo import MongoClient

conn = MongoClient("mongodb://sample_mongo:27017")
db_conn = conn["test"]
db_collection = db_conn["sample"]

# the size of record is 23MB

record = { \
    "name": "drugs",
    "collection_id": 23,
    "timestamp": 1515065002,
    "tokens": [], # contains list of strings
    "tokens_missing": [], # contains list of strings
    "token_mapping": {} # Dictionary contains transformed tokens
 }

db_collection.insert(record, check_keys=False)
我收到错误文档工具arge:BSON文档太大。在MongoDB中,BSON文档的最大大小为16 MB

  File "/usr/local/lib/python2.7/dist-packages/pymongo-3.5.1-py2.7-linux-x86_64.egg/pymongo/collection.py", line 2501, in insert
check_keys, manipulate, write_concern)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-3.5.1-py2.7-linux-x86_64.egg/pymongo/collection.py", line 575, in _insert
check_keys, manipulate, write_concern, op_id, bypass_doc_val)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-3.5.1-py2.7-linux-x86_64.egg/pymongo/collection.py", line 556, in _insert_one
check_keys=check_keys)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-3.5.1-py2.7-linux-x86_64.egg/pymongo/pool.py", line 482, in command
self._raise_connection_failure(error)
  File "/usr/local/lib/python2.7/dist-packages/pymongo-3.5.1-py2.7-linux-x86_64.egg/pymongo/pool.py", line 610, in _raise_connection_failure
raise error
  DocumentTooLarge: BSON document too large (22451007 bytes) - the connected server supports BSON document sizes up to 16793598 bytes.

BSON文档的最大大小为16 MB。为了存储大于最大大小的文档,MongoDB提供了API


是用于存储和检索超过BSON文档大小限制16 MB的文件的规范。GridFS通过将大型文档划分为多个部分或区块来存储该文档。每个区块存储在一个单独的文档中。GridFS区块的默认大小为255 KB。GridFS使用两个集合来存储文件。一个集合存储文件块,另一个存储文件元数据

快速答案是否定的,您不能绕过16 MB BSON大小限制。如果您达到了这个极限,您将需要为您的文档探索替代方案,例如GridFS或不同的模式设计

首先,我会问一系列问题,以确定您的设计重点,例如:

  • 您有名为
    tokens
    tokens\u missing
    token\u mapping
    的字段。我认为这些字段各自都非常大,将这三个字段放在一个文档中会将其压缩到>16MB。是否可以将此文档拆分为三个集合

  • 应用程序的访问模式是什么?您需要始终访问哪个字段?您不经常访问哪个字段?您可以根据这些模式将文档拆分为不同的集合

  • 请记住需要为文档编制索引,因为MongoDB的性能与支持查询的良好索引密切相关。不能在一个索引中为两个数组编制索引。在中有更多信息

  • 如果需要在一个查询中组合所有相关数据,MongoDB 3.2及更新版本为您提供了,这类似于SQL的左外联接

  • 与SQL的常规模式设计不同,MongoDB的模式设计基于应用程序的访问模式。16 MB的限制是为了让您知道设计可能不是最优的,因为这样大的文档会对性能有害,难以更新,等等。通常情况下,最好是有很多小文档,而不是几个大文档


    更多示例可在和中找到。

    欢迎来到
    堆栈溢出
    ,提问时请更具体一点:到目前为止,您对代码示例做了哪些尝试?()/你期待什么?/你有什么错误?有关帮助,请查看“”更新了我尝试并指定错误的代码。谢谢。找出是什么文档字段使它如此大(令牌、令牌_缺失?),将其作为包含原始文档引用的文档存储在单独的集合中。如果不使用GridFS,我们无法处理此问题吗?通过维护文档之间的引用,即将文档拆分为子文档,并在文档之间通过OBEJCTID进行引用,从而减小文档大小。请告诉我你是否明白我的意思。我已经浏览了这个关于文档之间关系的URL,但没有弄清楚如何实现。谢谢。如果每个文档的大小小于16MB,您可以将文档拆分为多个文档并存储在多个集合中。GridFS是mongoDB提供的解决方案,用于存储更大大小的文档,而无需手动拆分。在任何一种情况下,都可以手动或通过Mongo拆分文档。如果我们手动操作,我们需要维护文档之间的关系,而在GridFS中,它由MongoDB负责。有关GridFS示例,请参阅本文-