Для производственного резервного копирования MongoDB рекомендует mongodump вместо mongoexport для точности данных. Тем не менее, мне нужно «очистить» данные от базы данных MongoDB, прежде чем выполнять их резервное копирование. Я не знаю ни о каких параметрах очистки данных на стороне сервера, кроме mongoexport . Два вопроса:
- Доступен ли mongoexport кэш MongoDB в оперативной памяти? Изменит ли это рабочий набор в оперативной памяти, как это делает mongodump ?
- Команда mongodump имеет эту опцию --query . «Предоставляет документ JSON в виде запроса, который необязательно ограничивает документы, включенные в вывод mongodump». Требуется ли запрос для исключения определенных полей в документе?
mongodump
резервное копирование или снимок из файловой системы, или написать собственный экспорт, еслиmongoexport
не получается то, что вам нужно. Любые инструменты или программы, которые читают данные,mongod
могут изменить ваш рабочий набор, если ваши данные для экспорта превышают объем оперативной памяти.Ответы:
В ответ на ваш первый вопрос оба инструмента (по умолчанию) просто пройдут по
_id
индексу, чтобы извлечь данные, а затем запишут их на диск. Итак, да, оба инструмента будут одинаково влиять на ваш рабочий набор, поэтому я обычно рекомендую запускать их на вторичном устройстве (желательно на скрытом вторичном, если это возможно). Я повторю Стенни в комментариях и рекомендую другие способы резервного копирования, если вы имеете дело с большими объемами данных.Что касается второго вопроса, я предполагаю, что вы ищете
mongodump
эквивалент--fields
опции, из которойmongoexport
можно вывести только определенные поля. Вариант запроса может быть использован для фильтрации результатов, но он не может быть использован с выступом (для выбора полей , возвращаемых) - это запрос функции , которая отслеживается в TOOLS-28 , но пока не планируется. Как также упоминал Стенни, другой вариант здесь - это написать собственный экспортер, который соответствует вашим потребностям (и снова, я бы по-прежнему рекомендовал запускать его против вторичного устройства для защиты вашего рабочего набора).источник
(извините, не знаю)
--query будет выбирать или исключать целые документы, а не поля.
Это было бы хорошей идеей, хотя:
источник
Mongoexport на самом деле сохраняет типы, но делает данные несовместимыми. Если вы экспортируете поле с помощью Ints и Longs, оно экспортирует его как объекты Numbers и JSON соответственно, что может усложнить его в будущем.
«Строгий режим. Представления строгого режима типов BSON соответствуют JSON RFC. Любой анализатор JSON может анализировать эти представления строгого режима как пары ключ / значение; однако только внутренний анализатор JSON MongoDB распознает информацию о типах, передаваемую форматом».
https://docs.mongodb.com/manual/reference/mongodb-extended-json/
источник