Mongoexport без поля _id
Я использую mongoexport для экспорта некоторых данных в форматированный файл .json, однако у документа есть большие накладные расходы, введенные с помощью кортежей _id: IDVALUE.
Я нашел аналогичную запись Есть ли способ получить данные из MongoDB без поля _id? о том, как опустить поле _id при извлечении данных из mongo, но не экспортируется. Предлагается использовать: .Exclude("_id")
. Я попытался переписать параметр -query для mongoexport, чтобы каким-то образом включить параметр .Exclude("_id")
, но все попытки не удались.
Пожалуйста, предложите, каков правильный способ сделать это, или я должен вернуться к использованию некоторых методов пост-экспорта?
Спасибо
Ответы
Ответ 1
Невозможно исключить поле (например, _id
) с помощью mongoexport.
Вот альтернатива, которая работала для меня в базах данных умеренного размера:
mongo myserver/mydb --quiet --eval "db.mycoll.find({}, {_id:0}).forEach(printjson);" > out.txt
В большой базе данных (много миллионов записей) это может занять некоторое время, и выполнение этого будет зависеть от других действий, которые люди пытаются сделать в системе:
Ответ 2
Я применил решение quux00, но forEach(printjson)
печатает примечание MongoDB Extended JSON на выходе (например "last_update" : NumberLong("1384715001000")
.
Лучше использовать следующую строку:
db.mycoll.find({}, {_id:0}).forEach(function (doc) {
print( JSON.stringify(doc) );
});
Ответ 3
Я знаю, что вы указали, что хотите экспортировать в JSON, но если бы вы могли заменить CSV-данные, то экспорт локальных монго будет работать, и будет намного быстрее, чем вышеупомянутые решения.
mongoexport --db <dbName> --collection <collectionName> --csv --fields "<fieldOne>,<fieldTwo>,<fieldThree>" > mongoex.csv
Ответ 4
mongoexport
, похоже, не имеет такой опции.
С ramda-cli удаление дескриптора _id
будет выглядеть так:
mongoexport --db mydb --collection mycoll -f name,age | R 'omit ["_id"]'
Ответ 5
mongo <server>/<database> --quiet --eval "db.<collection>.find({}, {_id:0,<field>:1}).forEach(printjson);" > out.txt
Если у вас есть запрос на выполнение изменения ""
на ''
и запись вашего условия в find
с помощью ""
, как find("age":13)
.
Ответ 6
Самый простой способ исключить информацию суб-документа, такую как "_id", - это экспортировать его как csv, а затем использовать инструмент для преобразования csv в json.
Ответ 7
Вы пытались указать свои поля с помощью флага --fields
? Все поля, которые не упоминаются, исключаются из export.
Для удобства обслуживания вы также можете записать свои поля в отдельный файл и использовать --fieldFile
.