2015-09-05 61 views
0

我正在嘗試創建一個流星包來將JSON文件導入mongoDB中的集合。但我不太確定,如果這是可能的。流星包:導入JSON數組到mongoDB

所以我想讓用戶上傳一個JSON文件。在輸入字段中,用戶還鍵入必須用於導入的集合名稱。在此之後,JSON數組應該保存到給定的集合中。

HTML:

<template name="importJSON"> 
    <form id="importJson"> 
     <input type="text" id="collection"> 
     <input type="file" id="file"> 
    </form> 
</template> 

流星:

Template.importJSON.events({ 
    'submit #importJson': function(e){ 
     e.preventDefault(); 
     var collection = e.target.collection.value; 
     var obj = JSON.parse(response); 
     db.collection.insert(obj); 
    } 
}); 

所以我有三個問題是:

1)如何我要做上傳本身,作爲文件應該暫時上傳

2)如何使用輸入字段中給出的集合名稱?

3)如何以正確的方式導入數據?插入只會將新數據附加到現有數據,不是嗎?

回答

1

因此,要回答你的三個問題:

1)如何做我必須做的上傳本身,如果你需要做的是閱讀文件應暫時上傳

該文件,然後將其插入到集合中。在這種情況下,你甚至不需要上傳文件。只需在客戶端讀取文件即可。這裏是關於Reading files in JavaScript using the File APIs的文章。

2)如何使用輸入字段中給定的集合名稱?

說,在輸入字段中給出的集合名稱爲products,並假設你有一個這樣的樣本數據文件:

{ 
    "name": "Product", 
    "id": "Product identifier", 
    "name": "Name of the product", 
    "price": "9990", 
    "tags": ["tag1", "tag2"] 
} 

在這一點上,你需要決定你是如何做到這一點。如果您在服務器端已經有Products集合。

<your app name>/lib/collections/products.js

Products = new Meteor.Collection('Products'); 
在您的客戶端代碼

然後:

var rawproducts = (content of the file you read using the File API -- as mentioned above) 
var newproducts = JSON.parse(rawproducts); 

for (var i = 0; i < newproducts.length; i++) { 
    Products.insert(newproducts[i]); 
} 

您也可以通過創建一個本地唯一的集測試了這一點本地。

//pass null as collection name, it will create 
//local only collection 
Products = new Mongo.Collection(null); 

for (var i = 0; i < newproducts.length; i++) { 
Products.insert(newproducts[i]); 
} 

注:如果您使用的是本地唯一收藏您的數據仍然在客戶端上。您需要將其與服務器同步(如上所述)以實現持久性。

3)如何以正確的方式導入數據?插入只會將新數據附加到現有數據,不是嗎?

導入數據如上所示將繼續追加數據。您可能想要考慮如何重寫數據或完全覆蓋現有數據。

希望這會有所幫助。


更新:

如何刪除所有從集合中的元素?

Products.remove({}) // remove every product 
+0

哇,謝謝!如何在添加數據之前清空給定的集合? – user3142695

+0

@ user3142695我現在已經更新了答案,以包含有關如何從集合中刪除所有元素的詳細信息? –

+0

謝謝。希望最後一個問題:我嘗試動態地製作完整的東西。這意味着用戶可以選擇應該使用的集合。那麼我應該怎麼做'Products = new Meteor.Collection('Products');'這個有一個變量?輸入字段#collection提供集合 - 這在您的示例「Products」中。 – user3142695