簡體   English   中英

如何在 MongoDB 中將集合導出為 CSV?

[英]How to export collection to CSV in MongoDB?

如何將 MongoDB 集合中的所有記錄導出到.csv文件?

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv

這要求我指定需要導出的字段的名稱。 我可以只導出所有字段而不指定字段名稱嗎?

@karoly-horvath 說得對。 csv 需要字段。

根據 MongoDB 問題跟蹤器https://jira.mongodb.org/browse/SERVER-4224中的這個錯誤,您必須在導出到 csv 時提供這些字段 文檔對此不清楚。 這就是錯誤的原因。

試試這個:

mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName

更新:

此提交: https : //github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398修復了 3.0.0-rc10 及更高版本的文檔。 它改變

Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`

Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`

3.0 及以上版本:

您應該使用--type=csv而不是--csv因為它已被棄用。

更多詳情: https : //docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format

完整命令:

mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName

此外,逗號分隔的字段名稱之間不允許有空格。

不好的: -f firstname, lastname

好: -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

您必須手動指定它,如果您考慮一下,這非常有意義。 MongoDB 是無模式的; 另一方面,CSV 具有固定的列布局。 如果不知道不同文檔中使用了哪些字段,就不可能輸出 CSV 轉儲。

如果您有一個固定的模式,也許您可​​以檢索一個文檔,使用腳本從中獲取字段名稱並將其傳遞給 mongoexport。

如果需要,您可以將所有集合導出到 csv,而無需指定--fields (將導出所有字段)。

http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/運行這個 bash 腳本

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;

我無法讓 mongoexport 為我做這件事。 我發現,要獲得所有字段的詳盡列表,您需要遍歷整個集合一次。 使用它來生成標題。 然后再次循環遍歷集合以填充每個文檔的這些標題。

我寫了一個腳本來做到這一點。 將 MongoDB 文檔轉換為 csv,而不考慮各個文檔之間的架構差異。

https://github.com/surya-shodan/mongoexportcsv

對我有用 mongo:4.2.6 遠程處理到 docker 容器

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

此外,如果您想導出內部 json 字段,請使用點(. 運算符)。

JSON 記錄:

{
    "_id" : "00118685076F2C77",
    "value" : {
        "userIds" : [ 
            "u1"
        ],
        "deviceId" : "dev"
}

帶有點運算符的 mongoexport 命令(使用 mongo 3.4.7 版):

./mongoexport --host localhost --db myDB --collection myColl --type=csv --out out.csv --fields value.deviceId,value.userIds

輸出 csv:

value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"

注意:確保您沒有導出數組。 它會破壞 CSV 格式,如上面顯示的字段 userIds

MongoDB Atlas 用戶的解決方案!

--fields參數添加為用雙引號括起來的逗號分隔字段名稱:

--fields "<FIELD 1>,<FIELD 2>..."

這是完整的示例:

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>..."

這對我有用 試試吧

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

如果您想要過濾字段,則上面的 cmd 返回用戶集合的全部數據,然后添加 --fields=email,name

使用 Mongo Compass 工具輕松導出 csv 或 json 文件

Mongo Compass 作為 MongoDB 的 GUI,MongoDB Compass 允許您對文檔結構、查詢、索引、文檔驗證等做出更明智的決策。 商業訂閱包括對 MongoDB Compass 的技術支持。 https://www.mongodb.com/try/download/compass 在此處輸入圖片說明

對於所有被錯誤困住的人。

讓我給你們一個解決方案,並簡要解釋一下:-

連接命令:-

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 --> Mongo 服務器的主機

--port --> Mongo 服務器的端口

-u --> 用戶名

-p --> 密碼

--db --> 要從中導出的數據庫

--collection --> 要導出的集合

--type --> 在我的情況下的導出類型 CSV

--out --> 要導出的文件名

--fields --> 要導出的所有字段(如果是 CSV,請不要在逗號之間的兩個字段名稱之間留空格)

--authenticationDatabase --> 存儲所有用戶信息的數據庫

下面的命令用於將集合導出為 CSV 格式。

注意: naag是數據庫, employee1_json是一個集合。

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM