如何使用mongoimport从tsv文件中获取特定文件?

时间:2015-07-20 10:55:23

标签: mongodb mongoimport

我有一个.tsv文件,如下所示,

Name   City   Mobile   Country
A      Hyd    877777   IN
B      Ban    78899    IN

现在,我不希望存储所有字段。我需要一些特定的领域。我想使用mongoimport仅将名称,城市和移动字段导入Mongo DB。 我使用了以下命令,但它不能正常工作

mongoimport --db test --collection persons  --type tsv --file persons.tsv --fields Name,City,Mobile

最终文档存储在Mongo DB中,如下所示:

{
    "_id" : ObjectId("55accf948c59222984066646"),
    "Name" : "A",
    "Ciry" : "Hyd",
    "Mobile" : "87777"
}

你能帮我解决一下吗?

3 个答案:

答案 0 :(得分:7)

这是不可能的,因为使用mongoimport只能导入包含数据库中数据的整个文件,而不能导入文件的特定内容。

要将tsv文件导入上面给出的数据库,您可以使用:

mongoimport --db test --collection persons  --type tsv --file persons.tsv --headerline

<强>释

  

--headerline

     

如果使用--type csv或--type tsv,则使用第一行作为字段名称。   否则,mongoimport会将第一行导入为不同的文档。

     

如果您在导入JSON数据时尝试包含--headerline,   mongoimport将返回错误。 --headerline仅适用于csv或tsv   进口。

如果您的tsv文件仅包含要导入的数据而不包含字段名称作为标题,则可以使用fields中的mongoimport属性

示例:mongoimport --db test --collection persons --type tsv --file persons.tsv --fields Name,City,Mobile,Country

<强>释

  

--fields <field1[,field2]>, -f <field1[,field2]>

     

导入csv或时,指定以逗号分隔的字段名称列表   在第一行(即标题)行中没有字段名称的tsv文件   该文件。

     

如果您在导入JSON数据时尝试包含--fields,   mongoimport将返回错误。 --fields仅适用于csv或tsv   进口。

答案 1 :(得分:0)

mongoimport实用程序没有任何功能可以像您想要的那样对输入进行这种操作。这是&#34;设计&#34;因为还有其他工具可以为您处理。

值得注意的是&#34; pipe&#34; |运算符,在Unix变体和Windows命令提示符shell中都受支持,仅举几例。所以mongoimport本身可以读取&#34;标准输入&#34;而不是来自&#34;管道的给定--file&#34;来自另一个进行过滤的进程的输入。

一个简单的&#34; perl&#34;示例(但在选择的脚本中遵循相同的):

perl -pe 'chomp($_); @p = split(/\t/,$_); pop(@p); $_ = join("\t",@p) . "\n";' < persons.tsv

那将&#34;剥离&#34;源persons.tsv中的最后一个字段,因此输出为:

Name    City    Mobile
A       Hyd     877777
B       Ban     78899

然后简单地&#34;结合&#34;使用&#34; pipe&#34;的声明|为了传递&#34;输入&#34;进入mongoimport

perl -pe 'chomp($_); @p = split(/\t/,$_); pop(@p); $_ = join("\t",@p) . "\n";' < persons.tsv | \
mongoimport --db test --collection persons --type tsv  --headerline --ignoreBlanks

正在创建数据:

2015-07-21T09:53:40.726+1000    connected to: localhost
2015-07-21T09:53:40.741+1000    imported 2 documents
$ mongo
MongoDB shell version: 3.0.3
connecting to: test
> db.persons.find()
{ "_id" : ObjectId("55ad8a04ee3124750e1600e7"), "Name" : "A", "City" : "Hyd", "Mobile" : 877777 }
{ "_id" : ObjectId("55ad8a04ee3124750e1600e8"), "Name" : "B", "City" : "Ban", "Mobile" : 78899 }

答案 2 :(得分:0)

Mongoimport完整示例:

  

mongoimport --port 7812 -u“turkeyUserAdmin”-p“Turkey @ DB ^&amp; *”   --authenticationDatabase“admin” - db“USA” - 收集B2B --type tsv --fields   Database_Individual_ID.string(),Name.string(),Company.string()   --columnsHaveTypes --file F:/JAYBk/Project/B2B/Data/USA_B2B_DATA.tsv