mongorestore не пропускает ошибки без флага / stopOnError

Я использую mongo 2.6.4 / Windows Server 2012 R2.

Mongodump сгенерировал два файла дампа: mongodump -d mydb

  • transaction.bson
  • transaction.metadata.json

Пытался восстановить эту информацию с помощью mongorestore (2.6.4):

mongorestore --host 127.0.0.1 --port 27018 --collection transaction --db mydb

Но ошибка возврата инструмента (прогресс ~ 23%):

2015-08-17T19:45:51.844+0400 Failed: restore error: mydb.transaction: error restoring from F:\restore\transaction.bson: insertion error: Client Error: bad object in message: invalid bson type in object with _id: ObjectId('528dc7c03599b01214d17469')

Поэтому я решил расширить его флагами:

mongorestore --host 127.0.0.1 --port 27018 --collection transaction --db mydb --drop --noIndexRestore --noOptionsRestore --noobjcheck --filter "{'_id' : { $ne: '528dc7c03599b01214d17469' }}" F:/restore/transaction.bson

И снова получил ту же ошибку.

Итак, я попытался использовать mongorestore из версии 3.0:

mongorestore /host 127.0.0.1 /port 27018 /collection transaction /db mydb /drop /noIndexRestore /noOptionsRestore /keepIndexVersion F:/restore/transaction.bson

И снова получил ту же ошибку.

Я надеялся, что это поможет, потому что я не использовал флаг / stopOnError. Но это не так. Все время выходит из строя на ~ 23%.

Вот часть журнала MongoDB:

2015-08-17T19:14:32.447+0400 [conn8] Assertion: 10307:Client Error: bad object in message: invalid bson type in object with _id: ObjectId('528dc7c03599b01214d17469') 2015-08-17T19:14:32.532+0400 [conn6] insert mydb.transaction ninserted:10000 keyUpdates:0 numYields:0 locks(micros) w:181893 181ms 2015-08-17T19:14:32.743+0400 [conn9] insert mydb.transaction ninserted:10000 keyUpdates:0 numYields:0 locks(micros) w:211264 211ms 2015-08-17T19:14:32.921+0400 [conn7] insert mydb.transaction ninserted:10000 keyUpdates:0 numYields:0 locks(micros) w:176525 177ms 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\util\stacktrace.cpp(169) mongo::printStackTrace+0x43 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\util\log.cpp(127) mongo::logContext+0x9c 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\util\assert_util.cpp(183) mongo::msgasserted+0xfb 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\util\assert_util.cpp(174) mongo::msgasserted+0x13 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\db\dbmessage.cpp(116) mongo::DbMessage::nextJsObj+0x11f 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\db\instance.cpp(898) mongo::receivedInsert+0x18f 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\db\instance.cpp(484) mongo::assembleResponse+0x7c9 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\db\db.cpp(202) mongo::MyMessageHandler::process+0x111 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\mongo\util\net\message_server_port.cpp(210) mongo::PortMessageServer::handleIncomingMsg+0x671 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(185) boost::'anonymous namespace'::thread_start_function+0x21 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 2015-08-17T19:14:36.250+0400 [conn8] mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f 2015-08-17T19:14:36.250+0400 [conn8] KERNEL32.DLL BaseThreadInitThunk+0xd 2015-08-17T19:14:36.250+0400 [conn8] 2015-08-17T19:14:36.255+0400 [conn8] insert mydb.transaction keyUpdates:0 exception: Client Error: bad object in message: invalid bson type in object with _id: ObjectId('528dc7c03599b01214d17469') code:10307 numYields:0 0ms

Я хочу прочитать данные из этого файла, но он огромен (18 Гб). Ничего страшного, если некоторые записи будут пропущены.

Кто-нибудь знает, как это решить?


person kipwoker    schedule 17.08.2015    source источник


Ответы (1)


mongodump хорошо сбросить всю базу данных. Если вы просто хотите работать с одной коллекцией, попробуйте экспортировать коллекцию transaction с помощью mongoexport, например mongoexport --collection transaction --db mydb --out transaction.json, и импортировать ее с помощью mongoimport --collection transaction --db mydb --file transaction.json. Если вы восстанавливаете полный дамп, и он не работает с определенной коллекцией, вы можете выполнить восстановление без проблемной коллекции, используя следующий флаг --excludeCollection transaction

person andreofthecape    schedule 30.08.2019