Как в mongodb загрузить файл

Обновлено: 06.07.2024

Мой угловой код:

Журналы консоли возвращают правильные файловые объекты.

Мангуст пока что

Это console.log продолжает возвращаться неопределенным. Так что-то, где-то пошло ужасно не так. Пожалуйста, помогите мне! Я хочу получить этот файл в моем Mongoose и сохранить его в MongoDB, я никогда не делал этого раньше и, похоже, не могу найти какой-либо достойной документации для Малтера или какого-либо достойного объяснения для хранения файлов, которые имеют отношение к моему случаю. Что я делаю не так? Что я должен делать вместо этого?

2 ответа

Человек ты бежишь по неверному пути. В вашем предыдущем вопросе я уже объяснил, что Multer используется для сохранения файлов в файловой системе, а не в вашей базе данных напрямую. Для этого вы должны использовать GRIDFS.

Приходя к вашему текущему вопросу.

Здесь upload.single('solution') - вызывает функцию Upload, и переданное имя файла является решением, но достаточно очевидно, что оно здесь недоступно.

Используйте этот тип формата - документация Multer

Часть хранения там используется, чтобы указать путь, где ваш файл должен быть сохранен, а раздел имени файла используется для внесения изменений в имя файла, которое вы хотели бы иметь.

Пожалуйста, прочитайте документацию, потому что это поможет. Когда мы используем сторонние модули, мы должны подтвердить информацию, которую они уже предоставили, чтобы мы могли легко использовать их работу.

Позвольте мне сделать это проще для вас. Вот готовый код, который работает.

Иди проверь эту ветку. Вопрос был поднят мной - проблема была в том, что я отправлял файлы в формате массива, как в нескольких файлах одновременно. Если вы этого не делаете, просто измените сегмент ng-file-upload, чтобы использовать демонстрационный пример одиночной загрузки, и в коде nodejs на стороне сервера замените .array на .single , и все будет работать так, как вы хотите, чтобы они работали - учитывая, что вы хотите использовать файловую систему для хранения файлов.

Я повторяю, что этот метод не поможет вам сохранить файл в mongodb напрямую.

Дайте мне знать, если вам нужны дальнейшие разъяснения.

После некоторых исследований я нашел ответ на свою проблему. Теперь я могу хранить файлы в моем MongoDB. Для тех, кто заинтересован, я публикую свой код Mongoose ниже с небольшим описанием.

Начните с установки пакетов, необходимых для этой операции. Я использовал следующие

установка npm - сохранение огромного

npm install - сохранить gridfs

npm install --save fs

Это пакеты, которые я использовал (Formidable, gridfs и fs). для меня это полностью рабочий код mongoose, относящийся к этой конкретной форме и запросу.

Посмотрите, как загружать файлы разных размеров с помощью Spring Boot и MongoDB.

1. Обзор

В этом уроке мы обсудим, как загружать и извлекать файлы с помощью MongoDB и Spring Boot.

Мы будем использовать MongoDB BSON для небольших файлов и сетки для более крупных.

2. Конфигурация Maven

Во-первых, мы добавим зависимость spring-boot-starter-data-mongodb в ваш pom.xml :

Кроме того, нам понадобятся зависимости spring-boot-starter-web и spring-boot-starter-thymeleaf для отображения пользовательского интерфейса нашего приложения. Эти зависимости также показаны в нашем Руководстве по весенней загрузке с Thymeleaf .

В этом уроке мы используем Spring Boot версии 2.x.

3. Свойства пружинной Загрузки

Далее мы настроим необходимые свойства Spring Boot.

Давайте начнем с свойств MongoDB :

Мы также установим составные свойства сервлета, чтобы разрешить загрузку больших файлов:

4. Загрузка Небольших Файлов

Теперь мы обсудим, как загружать и извлекать небольшие файлы (размер < 16 МБ) с помощью MongoDB BSON .

Здесь у нас есть простой Документ класс — Фотография. Мы будем хранить наш файл изображения в BSON | Двоичном файле :

И у нас будет простое Хранилище фотографий :

Теперь для Фотослужбы у нас будет только два метода:

  • addPhoto() — для загрузки Фото в MongoDB
  • getPhoto() — для получения Фотографии с заданным идентификатором

5. Загрузка Больших Файлов

Теперь мы будем использовать сетки для загрузки и извлечения больших файлов.

Аналогично Фотослужбе , у нас будет Видеосервис с двумя методами — addVideo() и getVideo() :

Для получения более подробной информации об использовании GridFS с Spring ознакомьтесь с нашей статьей GridFS в Spring Data MongoDB .

6. Контроллеры

Теперь давайте взглянем на контроллеры — Фотоконтроллер и ВидеоКонтроллер .

6.1. Фотоконтроллер

Во-первых, у нас есть фотоконтроллер, который будет использовать наш фотосервис для добавления/получения фотографий .

Мы определим метод addPhoto() для загрузки и создания новой Фотографии :

У нас также есть get Photo() для получения фотографии с заданным идентификатором:

Обратите внимание, что, поскольку у нас есть данные изображения, возвращенные в виде байт[] , мы преобразуем его в Base64 Строка чтобы отобразить его на интерфейсе.

6.2 Видеоконтроллер

Далее давайте взглянем на наш видеоконтроллер .

Это будет иметь аналогичный метод, addVideo() , для загрузки Видео в наш MongoDB:

И здесь у нас есть get Video() для получения Видео с заданным идентификатором :

Мы также можем добавить метод stream Video () , который создаст потоковый URL-адрес из Video /InputStream :

7. Интерфейс

Наконец, давайте посмотрим на наш интерфейс.
Давайте начнем с uploadPhoto.html
, который предоставляет простую форму для загрузки изображения:

Далее мы добавим фотографии.html просмотр для отображения ваших фотографий:

Аналогично, у нас есть uploadVideo.html для загрузки Видео :

И videos.html для отображения видео:

8. Заключение

В этой статье мы узнали, как загружать и извлекать файлы с помощью MongoDB и Spring Boot. Мы использовали как SON , так и GridFS для загрузки и извлечения файлов.

Как экспортировать результаты запроса Mongo в файл и импорт в другую библиотеку Mongo

В качестве профессиональной документальной базы данных Mongodb имеет большое преимущество, которое необходимо использовать JavaScript, управлять базой данных, поэтому вы можете использовать сценарий JavaScript для выполнения сложного управления, как и пользовательская функция в Oracle, используется сохраненная процедура, управлять база данных.

Shell MongoDB достигается JavaScript, и он очень интуитивно понятен и простой в использовании JavaScript для реализации соответствующей функциональности. Запуск скрипта JavaScriptЧетыре вида [1]путь:

(1) Интерактивная оболочка Mongo

Большинство учебных пособий MongoDB объяснят это в первой главе.

(2) Mongo - EVAL запускает кусок сценария

Не вводите интерактивный режим, запустите сценарий MongoDB непосредственно на командной строке ОС.

(3) В рамках команды ОС запустите файл JS

(4) Запустите файл JS в режиме взаимодействия оболочки Mongo

Путь файла в параметре нагрузки () может быть либо относительным путь, либо абсолютный путь.

Эта статья использует третье решение, и команда выполняется в CMD в среде OS Windows напрямую.

(1) Создайте новый файл JS, напишите метод запроса, например, Query1201.js, содержимое файла выглядит следующим образом

(2) Введите команду оболочки ОС для выполнения

Результатом этого запроса будет напрямую генерировать файл результата1201.js под текущей папкой.

Запустите базу данных Mongodb в среде Windows[2]。

Используйте клиент Mongo, вновь созданную коллекцию

Используйте команду mongoimport для импорта данных из файла.

В процессе импорта данных, возникшая проблема состоит в том, чтобы экспортировать задачу формата файла JSON, запросив ошибку следующим образом:

Откройте файл данных JSON и найдите больше 4 строк заголовка текстового описания, контент выглядит следующим образом (что это за то, почему, не втулка не в глубине):

Поскольку файл данных JSON достигает 3,6 г, общий редактор не может открываться, используйте Python Dipmmeter для просмотра и удаления этого четырех строки текстового контента.

MongoDB — одна из самых популярных СУБД NoSQL. Она отличается масштабируемостью, мощностью и надежностью и удобством в использовании. В этом учебном модуле мы покажем, как импортировать и экспортировать ваши базы данных MongoDB.

Следует отметить, что под импортом и экспортом мы подразумеваем операции с данными в удобном для чтения формате, совместимом с другими программными продуктами. В отличие от импорта и экспорта, операции резервного копирования и восстановления используют специальные двоичные данные MongoDB, обеспечивающие согласованность и целостность данных и сохраняющие специальные атрибуты MongoDB. Таким образом, для переноса данных предпочтительнее использовать процесс резервного копирования и восстановления, если исходные и целевые системы совместимы друг с другом.

В этом учебном модуле мы не описываем задачи резервного копирования, восстановления и миграции. Более подробную информацию можно найти в учебном модуле Резервное копирование, восстановление и миграция баз данных MongoDB в Ubuntu 20.04.

Предварительные требования

Для этого учебного модуля вам потребуется следующее:

  • Один дроплет Ubuntu 20.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 20.04, в том числе пользователь без привилегий root с привилегиями sudo и брандмауэр.
  • СУБД MongoDB, установленная и настроенная согласно указаниям статьи Установка MongoDB в Ubuntu 20.04.
  • Понимание различий между данными JSON и BSON в MongoDB. Подробное описание этих различий можно найти в разделе Шаг 1 — Использование JSON и BSON в MongoDB в нашем учебном модуле Резервное копирование, восстановление и миграция баз данных MongoDB в Ubuntu 20.04.

Шаг 1 — Импортирование информации в MongoDB

Чтобы узнать, как работает импорт информации в MongoDB, мы используем популярный образец базы данных MongoDB — базу о ресторанах. Эта база имеет формат json, и ее можно загрузить с помощью wget следующим образом:

После завершения загрузки в текущем каталоге должен быть файл primer-dataset.json (размер 12 Мбайт). Импортируем данные из этого файла в новую базу данных newdb и в коллекцию restaurants .

Используйте команду mongoimport следующим образом:

Результат будет выглядеть вот так:

Как показывает приведенная выше команда, были импортированы 25359 документов. Поскольку у нас не было базы данных с именем newdb , MongoDB создала ее автоматически.

Давайте проверим импорт.

Подключитесь к только что созданной базе данных newdb :

Вы подключились к экземпляру базы данных newdb . Обратите внимание, что ваша командная строка изменилась. Это означает, что вы подключены к базе данных.

Подсчитайте число документов в коллекции restaraunts с помощью команды:

Будет выведен результат 25359 , т. е. количество импортированных документов. Для еще более эффективной проверки вы можете выбрать первый документ из коллекции restaraunts следующим образом:

Результат будет выглядеть вот так:

Такая детальная проверка может выявить проблемы с содержанием документа, кодировкой и т. д. Формат json использует кодировку UTF-8 , и ваши операции экспорта и импорта также должны использовать эту кодировку. Это необходимо помнить при редактировании файлов json вручную. В противном случае MongoDB автоматически сделает это за вас.

Чтобы выйти из командной строки MongoDB, введите команду exit :

Вы вернетесь в обычную командную строку как пользователь без привилегий root.

Шаг 2 — Экспорт информации из MongoDB

Как мы уже упоминали, при экспорте информации MongoDB вы можете получить удобный для чтения файлы с вашими данными. По умолчанию экспорт выполняется в формате json, но также вы можете использовать для экспорта формат csv (разделенные запятыми значения).

Чтобы экспортировать информацию из MongoDB, используйте команду mongoexport . Это позволяет выполнять детализированный экспорт с указанием базы данных, коллекции, поля, или даже с использованием запроса для экспорта.

Простой пример работы команды mongoexport — экспорт коллекции restaurants из базы данных newdb , куда мы ее до этого импортировали. Это можно сделать следующим образом:

В команде выше мы используем --db для определения базы данных, -c для определения коллекции и --out для определения файла, куда будут сохранены данные.

Вывод успешной команды mongoexport должен выглядеть вот так:

Этот вывод показывает, что было экспортировано 25359 документов, то есть, столько же документов, сколько мы импортировали.

В некоторых случаях, вам может быть нужно экспортировать только часть коллекции. Учитывая структуру и содержание файла restaurants json, давайте экспортируем все рестораны китайской кухни, расположенные в Бронксе. Если мы хотим получить эту информацию напрямую при подключении к MongoDB, нам нужно снова подключиться к базе данных:

Затем, используйте следующий запрос:

Результаты будут выведены на терминал:

Чтобы выйти из диалогового окна MongoDB, введите exit :

Если мы хотим экспортировать данные из командной строки sudo, а не во время подключения к базе данных, предыдущий запрос нужно сделать частью команды mongoexport , указав его после аргумента -q :

Обратите внимание, что после двойных кавычек в тексте запроса идет обратная косая черта ( \ ). Точно так же нужно выделять и другие специальные символы в запросе.

Если экспорт выполнен успешно, результат будет выглядеть вот так:

Выше показано, что мы экспортировали 323 записи, которые можно будет найти в заданном нами файле Bronx_Chinese_retaurants.json .

Используйте cat и less для сканирования данных:

Используйте пробел для прокрутки страниц данных:

Нажмите q , чтобы выйти. Теперь вы можете импортировать и экспортировать базу данных MongoDB.

Заключение

В этом учебном модуле мы познакомили вас с основами экспорта информации из базы данных MongoDB и импорта информации в эту БД. Дополнительную информацию можно найти в учебном модуле Резервное копирование, восстановление и миграция базы данных MongoDB в Ubuntu 20.04.

Также вы можете рассмотреть возможность использования репликации. Репликация позволяет продолжить выполнение службы MongoDB без перебоев на подчиненном сервере MongoDB во время восстановления главного сервера после неисправности. Частью процесса репликации является журнал операций (oplog), где записываются все операции, изменяющие данные. Вы можете использовать этот журнал, как если бы вы использовали двоичный журнал в MySQL для восстановления данных после последнего резервного копирования. Помните, что резервное копирование обычно выполняется ночью, и если вы решите восстановить данные вечером, вы потеряете все изменения, которые произошли с момента создания резервной копии.

Читайте также: