2016-12-17 43 views
0

我想從單個集合中導出單個字段。 像集合名稱產品字段名標籤
所有標籤將創建新的集合。我試過這個命令:如何從MongoDB中的集合中導出單個字段?

mongodump --host 192.168.1.46 --port 27017 --db myDb --collection products --fields tag -o bson --out C:\Users\Desktop\tag 
+0

有你那'products'集合中有你的文件的例子嗎? –

+0

你能澄清一下'所有的標籤都會創建新的集合嗎?'的含義嗎?你只是想找到所有的標籤,並在同一個數據庫中創建一個新的集合? –

+0

你好凱文,我只是想從一個集合中導出一個文件,並想從這些導出的字段創建一個新的集合。例如(如果產品集合的標籤字段是字符串,我只想從產品集合中導出所有標籤,然後導出標籤將創建一個新的集合,如標籤),希望您現在可以理解。 –

回答

1

mongodump不支持所選字段的備份。但是你可以使用mongoexport/mongoimport備份選定的領域:

mongoexport -c test --db testing -f key --out dump.json 
+0

對不起,我的 –

+0

是什麼意思,如果我在同一個命令中使用mongoexport而不是mongodump,那麼它也不起作用。 –

1

所以讓我們在我們收集將部分產品開始:

db.products.insertMany([ 
    { name: 'TV', tags: ['livingroom', 'electronics']}, 
    { name: 'Radio', tags: ['bedroom', 'electronics']}, 
    { name: 'Computer', tags: ['bedroom', 'electronics']} 
]); 

{ 
     "acknowledged" : true, 
     "insertedIds" : [ 
       ObjectId("586bae0ec5a9a94b2674943d"), 
       ObjectId("586bae0ec5a9a94b2674943e"), 
       ObjectId("586bae0ec5a9a94b2674943f") 
     ] 
} 

現在我們可以寫一個簡單的aggreation查詢去,雖然所有的文件

db.products.aggregate([ 
    {$unwind: '$tags'}, 
    {$group: {_id: '$tags' }}, 
    {$out: 'productTags'} 
]); 

{$unwind: '$tags'}將在解構爲每個標籤的文檔標籤陣列領域。 然後{$group: {_id: '$tags' }}將分組每個項目併爲每個標籤創建一個新文檔。 然後,{$out: 'productTags'}將爲我們創建一個包含文檔輸出的productTags集合。

現在如果我們查詢productTags集合,我們將得到以下的輸出:

> db.productTags.find() 
{ "_id" : "bedroom" } 
{ "_id" : "electronics" } 
{ "_id" : "livingroom" } 
相關問題