mongodb mongoimport导入CSV文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb mongoimport导入CSV文件相关的知识,希望对你有一定的参考价值。
在mongo shell里输入导入CSV文件的命令行,但是一直报错,求解原因!
这个命令应该直接在命令行运行,而不是在shell里运行 参考技术A 看不懂咋办如何使用mongoimport导入csv
【中文标题】如何使用mongoimport导入csv【英文标题】:How to use mongoimport to import csv 【发布时间】:2011-06-08 20:39:18 【问题描述】:尝试导入包含联系信息的 CSV:
Name,Address,City,State,ZIP
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
运行它似乎不会将任何文档添加到数据库中:
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
Trace 显示 imported 1 objects
,但启动 Mongo shell 并运行 db.things.find()
不会显示任何新文档。
我错过了什么?
【问题讨论】:
你在db.things.find()
之前尝试过use mydb
吗?
是 - 仍然显示 db.things 中的另一个文档
用于将 CSV 导入嵌套文档集合(带有子文档或数组),您可以使用 AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
【参考方案1】:
检查文件末尾是否有空行,否则在某些版本的 mongoimport 上会忽略最后一行
【讨论】:
【参考方案2】:您的示例适用于 MongoDB 1.6.3 和 1.7.3。以下示例适用于 1.7.3。您使用的是旧版本的 MongoDB 吗?
$ cat > locations.csv
Name,Address,City,State,ZIP
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
ctrl-d
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
connected to: 127.0.0.1
imported 3 objects
$ mongo
MongoDB shell version: 1.7.3
connecting to: test
> use mydb
switched to db mydb
> db.things.find()
"_id" : ObjectId("4d32a36ed63d057130c08fca"), "Name" : "Jane Doe", "Address" : "123 Main St", "City" : "Whereverville", "State" : "CA", "ZIP" : 90210
"_id" : ObjectId("4d32a36ed63d057130c08fcb"), "Name" : "John Doe", "Address" : "555 Broadway Ave", "City" : "New York", "State" : "NY", "ZIP" : 10010
【讨论】:
谢谢!这对我有用。除了按照您的方式创建 CSV 之外,我之前也在做同样的事情。试过了,它工作得很好。我在 MS Excel 中创建了原始文件,所以猜测每行末尾的换行符有问题。 也为我工作。我在 OS X 上保存了以 LF 行结尾的文件,它工作正常。 是否可以将 csv 中的所有记录仅导入 1 个对象而不是每条记录 1 个对象? 是的,在处理 CSV 文件时远离 Word。我遇到过同样的问题。 Word 和 mongoimport 中的错误 :( 要在导入时进行身份验证,您可以执行mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
【参考方案3】:
执行完mongoimport后使用这个
它将返回导入的对象数
use db
db.collectionname.find().count()
将返回对象的数量。
【讨论】:
【参考方案4】:我对类似的问题感到困惑,mongoimport 没有给我错误,但会报告导入 0 条记录。我使用默认的“另存为..”“xls as csv”保存了无法使用 OSX Excel for Mac 2011 版本的文件,而没有专门指定“Windows 逗号分隔(.csv)”格式。在研究了这个站点并尝试使用“Windows 逗号分隔 (.csv)”格式再次另存为后,mongoimport 工作正常。我认为 mongoimport 期望每行都有一个换行符,而默认的 Mac Excel 2011 csv 导出没有提供每行末尾的字符。
【讨论】:
Excel 在处理 CSV 文件时确实是一个怪异的野兽,其中还包括尝试在其他数据库上导入 CSV,严格来说这不是与 mongo 相关的问题。我建议在玩 CSV 时使用 Google 表格,它是免费的、在线的,并且还允许导入/导出格式正确的 CSV 和 TSV【参考方案5】:C:\wamp\mongodb\bin>mongoexport --db proj_mmm --collection products --csv --fieldFile offerings_fields.txt --out offerings.csv
【讨论】:
【参考方案6】:我们需要执行以下命令:
mongoimport --host=127.0.0.1 -d database_name -c collection_name --type csv --file csv_location --headerline
-d 是数据库名称
-c 是集合名称
--headerline 如果使用--type csv 或--type tsv,则使用第一行作为字段名称。否则,mongoimport 会将第一行作为不同的文档导入。
欲了解更多信息:mongoimport
【讨论】:
【参考方案7】:Robert Stewart 已经回答了如何使用 mongoimport 导入。
我建议使用 3T MongoChef 工具(3.2+ 版本)优雅地导入 CSV 的简单方法。将来可能会帮助某人。
-
您只需要选择集合
选择要导入的文件
您也可以取消选择要导入的数据。还有很多选择。
集合导入
见how to import video
【讨论】:
【参考方案8】:使用:
mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv
【讨论】:
【参考方案9】:如果您在生产环境中工作,您很可能需要进行身份验证。您可以使用类似的方法使用适当的凭据对正确的数据库进行身份验证。
mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
【讨论】:
【参考方案10】:首先你应该从mongo
shell 中出来,然后像这样执行mongoimport
命令:
Manojs-MacBook-Air:bin Aditya$ mongoimport -d marketdata -c minibars
--type csv
--headerline
--file '/Users/Aditya/Downloads/mstf.csv'
2017-05-13T20:00:41.989+0800 connected to: localhost
2017-05-13T20:00:44.123+0800 imported 97609 documents
Manojs-MacBook-Air:bin Aditya$
【讨论】:
$ mongoimport -d marketdata -c minibars --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Manoj Barik 体验的保证结果【参考方案11】:mongoimport -d test -c test --type csv --file SampleCSVFile_119kb.csv --headerline
检查收集数据:-
var collections = db.getCollectionNames();
for(var i = 0; i< collections.length; i++)
print('Collection: ' + collections[i]);
// print the name of each collection
db.getCollection(collections[i]).find().forEach(printjson);
//and then print the json of each of its elements
【讨论】:
【参考方案12】:罗伯特·斯图尔特的回答很棒。
我想补充一点,您也可以像这样使用 --columHaveTypes 和 --fields 键入您的字段:
mongoimport -d myDb -c myCollection --type csv --file myCsv.csv
--columnsHaveTypes --fields "label.string(),code.string(),aBoolean.boolean()"
(注意字段之间的逗号后面不要有空格)
对于其他类型,请参阅此处的文档:https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes
【讨论】:
【参考方案13】:我在 mongoimport shell 上使用它
mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline
类型可以选择csv/tsv/json
但是只有csv/tsv可以使用--headerline
您可以在offical doc 上阅读更多信息。
【讨论】:
【参考方案14】:1]We can save xsl as .csv file
2] Got to MongoDB bin pathon cmd - > cd D:\Arkay\soft\MongoDB\bin
3] Run below command
> mongoimport.exe -d dbname -c collectionname --type csv --file "D:\Arkay\test.csv" --headerline
4] Verify on Mongo side using below coomand.
>db.collectioname.find().pretty().limit(1)
【讨论】:
【参考方案15】:对于 3.4 版本,请使用以下语法:
mongoimport -u "username" -p "password" -d "test" -c "collections" --type csv --file myCsv.csv --headerline
3天后,我终于自己成功了。感谢所有支持我的用户。
【讨论】:
有错字,--headerline,【参考方案16】:奇怪的是没有人提到--uri
flag:
mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline
【讨论】:
【参考方案17】:分享给未来的读者:
在我们的例子中,我们需要添加host
参数才能使其工作
mongoimport -h mongodb://someMongoDBhostUrl:somePORTrunningMongoDB/someDB -d someDB -c someCollection -u someUserName -p somePassword --file someCSVFile.csv --type csv --headerline --host=127.0.0.1
【讨论】:
【参考方案18】:我的要求是将 .csv (with no headline)
导入远程 MongoDB
实例。 mongoimport v3.0.7
below 命令对我有用:
mongoimport -h <host>:<port> -u <db-user> -p <db-password> -d <database-name> -c <collection-name> --file <csv file location> --fields <name of the columns(comma seperated) in csv> --type csv
例如:
mongoimport -h 1234.mlab.com:61486 -u arpitaggarwal -p password -d my-database -c employees --file employees.csv --fields name,email --type csv
以下是导入后的截图:
其中name
和email
是.csv
文件中的列。
【讨论】:
【参考方案19】:鉴于我拥有的.csv
文件只有一列没有标题,下面的命令对我有用:
mongoimport -h <mongodb-host>:<mongodb-port> -u <username> -p <password> -d <mongodb-database-name> -c <collection-name> --file file.csv --fields <field-name> --type csv
其中 field-name 指的是 .csv
文件中列的标题名称。
【讨论】:
【参考方案20】:当我尝试导入 CSV 文件时,我遇到了错误。我做了什么。 首先,我将标题行的列名更改为大写字母并删除“-”并在需要时添加“_”。然后输入下面的命令将 CSV 导入 mongo
$ mongoimport --db=database_name --collection=collection_name --type=csv --file=file_name.csv --headerline
【讨论】:
像魅力一样工作!上面提到的答案是我认为的旧 MongoDB 版本。【参考方案21】:确保将 .csv 文件复制到 /usr/local/bin 或 mondodb 所在的任何文件夹
【讨论】:
【参考方案22】:以上所有这些答案都很棒。以及开发全功能应用程序的方法。
但是,如果您想要快速制作原型,想要在集合仍在变化时保持灵活性以及最小化您的早期代码库,有一个更简单的方法是没有太多讨论。
你现在基本上可以放弃 mongoimport 了。如果在这个问题上提到这里,我本可以节省 3 个小时。所以让我分享给其他人:
Mongodb 有一个名为 Mongo Compass 具有开箱即用的 csv 和 json 导入功能的 GUI,只需单击即可。它是 Mongo 生态系统的官方组成部分。在撰写本文时,它是免费的,并且非常适合我的用例。 https://www.mongodb.com/products/compass
-
您只需按照简单的安装即可在您的机器上运行 MongoDB 指南针。直接在 GUI 中用于数据库连接和身份验证的几个字段。
导入 csv/json 文件。在用户(我)验证之前,解析一个 30KB 的文件只需不到一秒的时间。
验证每个属性的“类型”。很棒的功能,我可以直接提到布尔值、整数等属性类型。根据我的经验,它们似乎都默认为字符串。您可以在导入前更新。日期更加挑剔,需要在编码方面特别注意。
单击进一步,csv 是您本地或云上的 mongo db 中的集合。瞧!
【讨论】:
【参考方案23】:如果您有多个文件,并且想使用 python 导入所有文件,您可以执行以下操作。
import os
import subprocess
# directory of files
dir_files = 'C:\data'
# create list of all files
_, _, fns = next(os.walk(dir_files))
files = [os.path.join(dir_files, fn) for fn in fns]
# mongotool address
mongotool = r'C:\Program Files\MongoDB\Server\4.4\bin\mongoimport.exe'
# name of mongodb database
mydatabase = 'mydatabase'
# name of mongodb collection
mycollection = 'mycollection'
# import all files to mongodb
for fl in files:
commands =[mongotool, '--db', mydatabase,
'--collection', mycollection,
'--file', fl,
'--type', 'tsv',
'--headerline']
subprocess.Popen(commands, shell=True)
【讨论】:
以上是关于mongodb mongoimport导入CSV文件的主要内容,如果未能解决你的问题,请参考以下文章