mongoexport only object value - mongodb

I have a really simple mongodb with only one property that i am saving, email.
I am successful at exporting that collection into a csv.
This is what it looks like.
http://imgur.com/gJKNQFH
What i would love to be able to do is only export that data this is in the 'email' property.
That way I do not have to do cleanup everything i want to use this .csv in mailchimp etc...
This is my mongoexport command
mongoexport -d myDatabase -c emails -o export.csv
Am i able to do this in mongoexport or do i need to do some custom view?
Thanks

MongoExport
Sample Document
{
"_id" : ObjectId("5694e6c5ad7b7e6a6953fb9e"),
"address" : {
"location" : "Dharmapuri",
"city" : "Chennai"
},
"author" : {
"name" : "Ponpal Johnson"
},
"book" : "origin of species"
}
MongoExport syntax
mongoexport --host <hostname> --db <Database Name> --collection <collection Name> --csv --fields fieldname1,fieldname2 --out fileName.csv
Example : Export in CSV Format
mongoexport --host localhost --db library --collection book --csv --fields address.location,author.name,book --out author.csv
Example : Export in JSON Format
mongoexport --host localhost --db library --collection book --fields address.location,author.name,book --out author.json

You should mongoexport in following way:
mongoexport -d myDatabase -c emails -f email --csv -o export.csv
where email is name of field that you want to export.
You need to give full path while exporting.

Related

Is there a way for mongoexport tool to export guids in .net encoding?

Is there a way for mongoexport tool to export guids in .net encoding instead of raw encoding?
Here is the export I am running:
mongoexport --db sandbox --collection guidtest --type csv --out testguid.csv --limit 10 --fields "_id"
Document:
{ "_id" : BinData(3, "AAE8ifyz4Uqi0afyAN6kYw==") }
Expected result:
893C0100B3FC4AE1A2D1A7F200DEA463
Actual result:
00013C89FCB3E14AA2D1A7F200DEA463

Export data to csv file using $in

I am trying to export data to csv file using mongo export with some condition with the following command
mongoexport --db <db_name> --collection <coll_name> --query "'meta.metaData.fieldName' : {$in : [EZR-2016-21123,EZR-2016-22016, EZR-2016-23420]}}" --fields <field_name> --type=csv --out out_file_name.csv
This works fine for other normal query, but when I put $in, it doesn't work.
You need to updated the query to be the following
mongoexport --db <db_name> --collection <coll_name> --query "{'meta.metaData.fieldName' : {'$in' : ['EZR-2016-21123', 'EZR-2016-22016', 'EZR-2016-23420']}}" --fields <field_name> --type=csv --out out_file_name.csv
You are missing the starting { off your query
Strings within the $in array need to be quoted

Trouble with mongoexport -query command

I am trying to export a subset of documents that contain a specific ObjectId from a collection of Twitter searches. To do this, I am using the following script:
mongoexport --db twitter --collection tweets --csv --fieldFile CSVfields.txt --out .\tweets.csv --query query.txt
...where CSVfields.txt references the specific document keys that I want in the export and query.txt contains:
{ "search" : ObjectId("525f9cfdb3685db029000001") }
When I run this, I get an error saying:
assertion: 16619 code FailedToParse: FailedToParse: Expecting '{': offset:0
Any idea what I am doing wrong?
Thanks!
--query takes a JSON query, not a file.
So either of the following should work:
mongoexport --db twitter --collection tweets --csv --fieldFile CSVfields.txt --out .\tweets.csv --query `cat query.txt`
mongoexport --db twitter --collection tweets --csv --fieldFile CSVfields.txt --out .\tweets.csv --query '{ "search" : ObjectId("525f9cfdb3685db029000001") }'

Using mongoexport/mongoimport to export in csv format for embeded documents

How to properly export embeded documents in csv formats.
I would normally use this command for non-embeded documents:
mongoexport --db db_name -c collection_name --csv -f "field1,field2"
But how would you do for embeded documents. Suppose collection_name document has embeded_doc embeded in it.
You can still use the same syntax:
If you have a document with field name that is a document, such as name: { first: "kay" }, you can still do:
mongoexport --db db_name -c collection_name --csv -f "name"
If you just want to export the field first in the embedded document name
mongoexport --db db_name -c collection_name --csv -f "name.first"

How to export collection to CSV in MongoDB?

How do you export all the records in a MongoDB collection to a .csv file?
mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
This asks me to specify name of the fields I need to export. Can I just export all the fields without specifying the names of fields?
#karoly-horvath has it right. Fields are required for csv.
According to this bug in the MongoDB issue tracker https://jira.mongodb.org/browse/SERVER-4224 you MUST provide the fields when exporting to a csv. The docs are not clear on it. That is the reason for the error.
Try this:
mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName
UPDATE:
This commit: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 fixes the docs for 3.0.0-rc10 and later. It changes
Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`
to
Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`
VERSION 3.0 AND ABOVE:
You should use --type=csv instead of --csv since it has been deprecated.
More details: https://docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format
Full command:
mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName
Also, you are not allowed spaces between comma separated field names.
BAD:
-f firstname, lastname
GOOD:
-f firstname,lastname
mongoexport --help
....
-f [ --fields ] arg comma separated list of field names e.g. -f name,age
--fieldFile arg file with fields names - 1 per line
You have to manually specify it and if you think about it, it makes perfect sense. MongoDB is schemaless; CSV, on the other hand, has a fixed layout for columns. Without knowing what fields are used in different documents it's impossible to output the CSV dump.
If you have a fixed schema perhaps you could retrieve one document, harvest the field names from it with a script and pass it to mongoexport.
If you want, you can export all collections to csv without specifying --fields (will export all fields).
From http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ run this bash script
OIFS=$IFS;
IFS=",";
# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT
# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);
# for each collection
for ((i=0; i<${#collectionArray[#]}; ++i));
do
echo 'exporting collection' ${collectionArray[$i]}
# get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
# now use mongoexport with the set of keys to export the collection to csv
mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done
IFS=$OIFS;
works for me remoting to a docker container with mongo:4.2.6
mongoexport -h mongodb:27017 --authenticationDatabase=admin -u username -p password -d database -c collection -q {"created_date": { "$gte": { "$date": "2020-08-03T00:00:00.000Z" }, "$lt": { "$date": "2020-08-09T23:59:59.999Z" } } } --fields=somefield1,somefield2 --type=csv --out=/archive.csv
Easy export csv or json file With Mongo Compass tool
Mongo Compass As the GUI for MongoDB, MongoDB Compass allows you to make smarter decisions about document structure, querying, indexing, document validation, and more. Commercial subscriptions include technical support for MongoDB Compass.
https://www.mongodb.com/try/download/compass
I could not get mongoexport to do this for me. I found that,to get an exhaustive list of all the fields, you need to loop through the entire collection once. Use this to generate the headers. Then loop through the collection again to populate these headers for each document.
I've written a script to do just this. Converting MongoDB docs to csv irrespective of schema differences between individual documents.
https://github.com/surya-shodan/mongoexportcsv
Also if you want to export inner json fields use dot (. operator).
JSON record:
{
"_id" : "00118685076F2C77",
"value" : {
"userIds" : [
"u1"
],
"deviceId" : "dev"
}
mongoexport command with dot operator (using mongo version 3.4.7):
./mongoexport --host localhost --db myDB --collection myColl
--type=csv --out out.csv --fields value.deviceId,value.userIds
Output csv:
value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"
Note: Make sure you do not export an array. It would corrupt the CSV format like field userIds shown above
Solution for MongoDB Atlas users!
Add the --fields parameter as comma separated field names enclosed in double inverted quotes:
--fields "<FIELD 1>,<FIELD 2>..."
This is complete example:
mongoexport --host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017 --ssl --username <USERNAME> --password <PASSWORD> --authenticationDatabase admin --db <DB NAME> --collection <COLLECTION NAME> --type <OUTPUT FILE TYPE> --out <OUTPUT FILE NAME> --fields "<FIELD 1>,<FIELD 2>..."
This working for me Try it
mongoexport --host cluster0-shard-dummy-link.mongodb.net:27017 --db yourdbname --forceTableScan --collection users --type json --out /var/www/html/user.json --authenticationDatabase admin --ssl --username Yourusername --password Yourpassword
Above cmd return whole data of the users collection
if you want filter field then add --fields=email,name
For all those who are stuck with an error.
Let me give you guys a solution with a brief explanation of the same:-
command to connect:-
mongoexport --host your_host --port your_port -u your_username -p your_password --db your_db --collection your_collection --type=csv --out file_name.csv --fields all_the_fields --authenticationDatabase admin
--host --> host of Mongo server
--port --> port of Mongo server
-u --> username
-p --> password
--db --> db from which you want to export
--collection --> collection you want to export
--type --> type of export in my case CSV
--out --> file name where you want to export
--fields --> all the fields you want to export (don't give spaces in between two field name in between commas in case of CSV)
--authenticationDatabase --> database where all your user information is stored
Below command used to export collection to CSV format.
Note: naag is database, employee1_json is a collection.
mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1