[英]Meteor-package: Import JSON-array to 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)我必須自己上載,因為文件應該暫時上載
如果您只需要閱讀文件,則將其插入集合中即可。 在這種情況下,您甚至不需要上傳文件。 只需在客戶端讀取文件即可。 這是一篇有關使用File API使用JavaScript讀取文件的文章。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.