mongodb #pymongo
#mongodb #pymongo
Вопрос:
Я просматриваю коллекцию mongodb, в которой есть большие документы, содержащие bson размером более 16 МБ. По сути, я вызываю любой из 2 в зависимости от флага для случайной выборки:
documents = collection.aggregate(
[{"$sample": {"size": sample_size}}], allowDiskUse=True)
или
documents = collection.aggregate(
[{"$limit": sample_size}], allowDiskUse=True)
sample_size здесь является параметром.
Проблема в том, что эта команда застревает на несколько минут над большими bson, а затем в конечном итоге mongodb прерывает выполнение, и мое сканирование всей коллекции не завершено.
Есть ли способ указать mongodb пропускать / игнорировать документы, размер которых превышает пороговое значение?
For those who think that MongoDB cannot store values larger than 16 MB, here is the error message by a metadata collector (LinkedIn DataHub):
OperationFailure: BSONObj size: 17375986 (0x10922F2) is invalid.
Size must be between 0 and 16793600(16MB) First element: _id: "Topic XYZ",
full error: {'operationTime': Timestamp(1634531126, 2), 'ok': 0.0, 'errmsg': 'BSONObj size: 17375986 (0x10922F2) is invalid. Size must be between 0 and 16793600(16MB)
Комментарии:
1. Вы не можете хранить документы размером более 16 Мбайт. Ваш запрос не имеет никакого смысла.
2. Для хранения документов, размер которых превышает максимальный размер, MongoDB предоставляет API GridFS. Дополнительные сведения о GridFS см. в mongofiles и документации к вашему драйверу. docs.mongodb.com/manual/reference/limits
3. @WernfriedDomscheit Тогда как насчет этого сообщения об ошибке, сообщаемого инструментом сканирования документов MongoDB: Ошибка операции: BSONObj размер: 17375986 (0x10922F2) недопустим. Размер должен быть от 0 до 16793600 (16 МБ)
4. Это ваш полный конвейер агрегации? Простой выбор коллекции
collection
?
Ответ №1:
Максимальный размер документа — 16 МБ см.
(Исключением является спецификация GridFS)
В вашей коллекции размер каждого документа уже составляет <16 МБ, MongoDB не позволяет нам хранить документы большего размера.
Если вы хотите отфильтровать, допустим, <10 МБ
Вы можете использовать оператор «$ bsonSize», чтобы получить размер документа и отфильтровать большие.