202

尝试导入包含联系信息的 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()并没有显示任何新文档。

我错过了什么?

4

23 回答 23

257

您的示例适用于 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 }
于 2011-01-16T07:57:55.433 回答
30

我对类似的问题感到困惑,mongoimport 没有给我错误,但会报告导入 0 条记录。我使用默认的“另存为..”“xls as csv”保存了无法使用 OSX Excel for Mac 2011 版本的文件,而没有专门指定“Windows 逗号分隔(.csv)”格式。在研究了这个站点并尝试使用“Windows 逗号分隔 (.csv)”格式再次另存为后,mongoimport 工作正常。我认为 mongoimport 期望每行都有一个换行符,而默认的 Mac Excel 2011 csv 导出没有提供每行末尾的字符。

于 2013-06-23T22:20:43.770 回答
24

我们需要执行以下命令:

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

于 2015-10-26T16:56:56.790 回答
6

如果您在生产环境中工作,您很可能需要进行身份验证。您可以使用类似的方法使用适当的凭据对正确的数据库进行身份验证。

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
于 2016-07-11T19:20:18.377 回答
3

检查文件末尾是否有空行,否则在某些版本的 mongoimport 上将忽略最后一行

于 2011-01-14T06:59:33.133 回答
3

我在 mongoimport shell 上使用它

mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline

type 可以选择 csv/tsv/json 但只有 csv/tsv 可以使用--headerline

您可以在官方文档上阅读更多内容。

于 2018-01-26T02:31:26.363 回答
1

Robert Stewart 已经回答了如何使用 mongoimport 导入。

我建议使用3T MongoChef Tool(3.2+ 版本)优雅地导入 CSV 的简单方法。将来可能会帮助某人。

  1. 您只需要选择集合
  2. 选择要导入的文件
  3. 您还可以取消选择要导入的数据。还有很多选择。
  4. 集合导入

了解如何导入视频

于 2016-01-29T07:57:17.370 回答
1

首先,您应该从mongoshell 中出来,然后执行如下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$
于 2017-05-13T12:02:49.013 回答
1

罗伯特斯图尔特的回答很棒。

我想补充一点,您还可以使用 --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

于 2018-01-18T11:18:56.790 回答
1

对于 3.4 版本,请使用以下语法:

mongoimport -u "username" -p "password" -d "test" -c "collections" --type csv --file myCsv.csv --headerline

3天后,我终于自己完成了。感谢所有支持我的用户。

于 2018-07-29T00:13:13.363 回答
1

我的要求是将导入.csv (with no headline)到远程MongoDB实例。对于mongoimport v3.0.7以下命令对我有用:

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

下面是导入后的截图:

在此处输入图像描述

wherenameemail是文件中的列.csv

于 2019-05-25T12:45:08.297 回答
1

给定.csv我只有一列没有 Header的文件,下面的命令对我有用:

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

于 2019-08-19T16:47:01.470 回答
1

当我尝试导入 CSV 文件时,出现错误。我做了什么。首先,我将标题行的列名更改为大写字母并删除“-”并在需要时添加“_”。然后键入以下命令以将 CSV 导入 mongo

$ mongoimport --db=database_name --collection=collection_name --type=csv --file=file_name.csv --headerline  

在此处输入图像描述

于 2019-10-14T01:12:17.360 回答
0

执行 mongoimport 后使用它

它将返回导入的对象数

use db
db.collectionname.find().count()

将返回对象的数量。

于 2011-11-10T11:24:01.563 回答
0

C:\wamp\mongodb\bin>mongoexport --db proj_mmm --collection products --csv --fieldFile offerings_fields.txt --out products.csv

于 2014-06-19T06:31:00.687 回答
0

采用 :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv
于 2016-04-06T14:23:03.243 回答
0

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
}

于 2017-11-19T16:35:23.430 回答
0
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)
于 2018-05-16T14:02:28.137 回答
0

奇怪的是没有人提到--uri标志:

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 
于 2018-08-22T05:23:54.623 回答
0

分享给未来的读者:

在我们的例子中,我们需要添加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
于 2018-09-04T07:38:59.077 回答
0

确保将 .csv 文件复制到 /usr/local/bin 或 mondodb 所在的任何文件夹

于 2019-10-18T00:57:43.020 回答
0

上面所有这些答案都很棒。以及使用功能齐全的应用程序的方式。

但是,如果您想要快速制作原型,想要在集合仍在更改时保持灵活性以及最小化您的早期代码库,则有一种更简单的方法,没有太多讨论。

你现在基本上可以放弃 mongoimport 了。如果在这个问题上提到这里,我本可以节省 3 个小时。所以让我分享给其他人:

Mongodb 有一个名为Mongo Compass 的 GUI,只需单击即可实现 csv 和 json 导入功能。它是 Mongo 生态系统的官方组成部分。在撰写本文时,它是免费的,并且非常适合我的用例。 https://www.mongodb.com/products/compass

  1. 您只需按照简单的安装即可在您的机器上运行 MongoDB 指南针。直接在 GUI 中用于数据库连接和身份验证的几个字段。
  2. 导入 csv/json 文件。在用户(我)验证之前,对一个 30KB 的文件进行解析只需不到一秒钟的时间。
  3. 验证每个属性的“类型”。很棒的功能,我可以直接提到布尔值、整数等属性类型。根据我的经验,它们似乎都默认为字符串。您可以在导入前更新。日期更加挑剔,需要在编码方面特别注意。
  4. 进一步单击 csv 是您本地或云上的 mongo db 中的一个集合。瞧!
于 2021-02-26T08:48:08.017 回答
0

如果您有多个文件并且想要使用 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)

于 2021-04-12T03:11:28.273 回答