Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What kind of files or directory is expected by mongorestore when using the -d flag?

Tags:

mongodb

I want to use the mongorestore command in a script, but I am having troubles understanding exactly what kind of input it is looking for.

After using the mongodump command, I end up with this tree:

mydirectory
└── dump
    ├── mydb1
    │   ├── schemas.bson
    │   └── schemas.metadata.json
    ├── mydb2
    │   ├── schemas.bson
    │   ├── schemas.metadata.json
    │   ├── status.bson
    │   └── status.metadata.json
    └── mydb3
        ├── schemas.bson
        └── schemas.metadata.json

I understood that I can use the mongorestore command like this:

mydirectory$ mongorestore

since it is looking by default for the dump directory.

However, I do not understand why using the following command:

mydirectory/dump$ mongorestore mydb1

give the following results:

2018-01-02T14:35:59.823+0100    building a list of dbs and collections to restore from mydb1 dir
2018-01-02T14:35:59.823+0100    don't know what to do with file "mydb1/schemas.bson", skipping...
2018-01-02T14:35:59.823+0100    don't know what to do with file "mydb1/schemas.metadata.json", skipping...
2018-01-02T14:35:59.823+0100    done

Moreover, when I use the -d flag to specify a database to restore, it only works when I specify the directory in which this database is located, for example:

mydirectory/dump$ mongorestore mydb1 -d mydb1

(I would have expected this command to work without the -d flag)

What kind of files or directory is mongorestore expecting when using (or not) the -d flag?

like image 592
Eldy Avatar asked Oct 16 '25 08:10

Eldy


1 Answers

mongorestore expects the dump folder to contain sub-folders with the database name, which in turn contain the BSON dump and the metadata. The error you're seeing is because it didn't find any subdirectory with BSON/metadata files in it.

Rather than restoring by going into the dump directory, it's better to use the --nsInclude option instead (new in MongoDB 3.4). See the nsInclude documentation for more details.

The option --nsInclude requires you to supply the namespace in the form of <database>.<collection>. For example, to restore the test database:

mongorestore --nsInclude "test.*"

To restore the test collection inside the test database:

mongorestore --nsInclude "test.test"

Make sure that you execute the restore from the dump directory's parent, and not from inside it.

like image 56
kevinadi Avatar answered Oct 18 '25 03:10

kevinadi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!