2015-07-20 38 views
2

我有一個.tsv文件如下,如何使用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 

最後文件存儲在蒙戈DB如下:

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

能否請你幫我解決這個問題?

回答

6

這是不可能的,因爲使用mongoimport您只能導入包含數據庫中數據的整個文件,而不是文件的特定內容。

要導入TSV文件到數據庫中給出的上面可以使用:

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

--headerline

如果使用--type CSV或--type tsv,使用第一行作爲字段名稱。 否則,mongoimport會將第一行導入爲不同的文檔。

如果您在導入JSON數據時嘗試包含--headerline, mongoimport將返回錯誤。 - 首行僅用於導入csv或tsv 。 mongoimport --db test --collection persons --type tsv --file persons.tsv --fields Name,City,Mobile,Country

如果您的TSV文件僅包含要導入的數據而不是字段名稱作爲標題,您可以在mongoimport

例如使用fields財產

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

導入csv或 tsv文件時,在第一個文件中沒有字段名稱時指定逗號分隔的字段名稱列表(即,頭文件)行 的文件。

如果您在導入JSON數據時嘗試包括--fields, mongoimport將返回錯誤。 - 字段僅用於導入csv或tsv 。

+0

我沒有使用--headerline,我正在使用--fields only ..仍然不起作用 –

+0

我在說你必須使用--headerline,否則它會將第一行視爲不同的文檔,而不是作爲字段標題。 –

+0

如果我使用--headerline,它將存儲Mongo DB中的所有字段,我不希望所有字段都被存儲。我需要一些特定的領域。如果可能,請分享一下命令嗎? –

0

mongoimport實用程序沒有任何功能可以對您的輸入進行這種操作,就像您自己想要的一樣。這是「通過設計」,因爲還有其他工具可以爲您處理。

值得注意的是,在Unix變體和Windows命令提示符shell中都支持「pipe」|運算符。因此,mongoimport本身可以從「標準輸入」中讀取,而不是從進行過濾的另一個進程的「管道」輸入中給出--file

一個簡單的「perl」的例子(但遵循相同的在所選擇的腳本):

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

這將「條」從源persons.tsv最後一個字段,以便輸出爲:

Name City Mobile 
A  Hyd  877777 
B  Ban  78899 

然後僅僅是爲了「結合」的表述與「管」 |到「輸入」進入mongoimport

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

其中hapily創建數據:

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 } 
0

Mongoimport完整的例子:

mongoimport --port 7812 -u 「turkeyUserAdmin」 -p 「土耳其@ DB^& *」 --authenticationDatabase 「admin」--db「USA」--collection B2B --type tsv --fields Database_Individual_ID.string(),Name.string(),Company.string() --columnsHaveTypes --file F:/ JAYBk/Project/B2B/Data/USA_B2B_DATA.tsv