簡體   English   中英

流星包:將JSON數組導入mongoDB

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM