流星包:导入JSON数组到mongoDB

问题描述:

我正在尝试创建一个流星包来将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)如何做我必须做的上传本身,如果你需要做的是阅读文件应暂时上传

该文件,然后将其插入到集合中。在这种情况下,你甚至不需要上传文件。只需在客户端读取文件即可。这里是关于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