Mongoexport без поля _id - программирование
Подтвердить что ты не робот

Mongoexport без поля _id

Я использую mongoexport для экспорта некоторых данных в форматированный файл .json, однако у документа есть большие накладные расходы, введенные с помощью кортежей _id: IDVALUE.

Я нашел аналогичную запись Есть ли способ получить данные из MongoDB без поля _id? о том, как опустить поле _id при извлечении данных из mongo, но не экспортируется. Предлагается использовать: .Exclude("_id"). Я попытался переписать параметр -query для mongoexport, чтобы каким-то образом включить параметр .Exclude("_id"), но все попытки не удались.

Пожалуйста, предложите, каков правильный способ сделать это, или я должен вернуться к использованию некоторых методов пост-экспорта?

Спасибо

4b9b3361

Ответ 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.