CLI tool that runs your query against MongoDB and outputs the results to CSV.
Supports both find
and aggregate
queries.
Provide a config.json
file in the directory you'll run mongo-csv
, with the following format:
{
"url": "mongodb://my-mongo-server-url",
"databaseName": "my_db",
"collection": "my_collection",
"query": { "color": "purple" }
}
Then you can either run mongo-csv
with npx
:
MONGO_USER=my_user MONGO_PASSWORD=secret npx mongo-csv
Or you can install mongo-csv
globally:
npm install -g mongo-csv
MONGO_USER=my_user MONGO_PASSWORD=secret mongo-csv
Option | Description | Default value |
---|---|---|
databaseName |
Name of the database with your data | required |
collection |
Name of the collection with your data | required |
url |
URL of the Mongo server to which you're connecting | mongodb://localhost:27017 |
method |
Method you want to call on the collection - find or aggregate |
find |
query |
The query you'd like to run to filter the data returned | {} (all records) |
options |
Lets you specify any of the Mongo driver's find or aggregate options. This is especially useful when running a find for specifying a projection to limit the number of columns returned, or a limit , to limit the number of rows. |
{} |
outputFilePath |
Path to the file to which you want the results written | ./query_results.csv |
authDb |
Specify the database against which to authenticate | Defaults to the value supplied for databaseName |
mongo-csv
will read documents using a cursor
to avoid reading them all at once, but here are some additional performance considerations:
- Write as specific a
query
as you can so you only get the data you really need - Use the
projection
option to specify only the fields you really need, so Mongo doesn't need to work to get you the rest - It's usually a good idea to have a database index in place to support your query, so it can run quickly
- Avoid reading huge amounts of data at your peak usage periods
- If your Mongo environment is a replica set, it's a good idea to point at one of your secondary servers to leave the primary server free to take care of new data being written
- Does
mongo-csv
supportdistinct
? Not directly, but you can achieve the same result using an aggregation.
MIT