Collections 如何在Meteor';s集合。插入

Collections 如何在Meteor';s集合。插入,collections,meteor,minimongo,Collections,Meteor,Minimongo,我有一个简单的CSV文件,有40000行,我正在用papa parse在浏览器端处理 我正试图使用“发现流星”和其他101篇我在谷歌搜索时发现的帖子中的技术,将它们一个接一个地插入到一个收藏中 40000插入浏览器端的速度非常快,但当我检查mongo服务器端时,它只有387条记录。 最终(通常在20秒左右)它开始插入服务器端。 但是如果我关闭或中断浏览器,已经插入的记录就会明显消失 如何强制插入到服务器端,或者至少监视,以便知道何时通知用户成功 我试过Tracker.flush()没什么区别 我

我有一个简单的CSV文件,有40000行,我正在用papa parse在浏览器端处理

我正试图使用“发现流星”和其他101篇我在谷歌搜索时发现的帖子中的技术,将它们一个接一个地插入到一个收藏中

40000插入浏览器端的速度非常快,但当我检查mongo服务器端时,它只有387条记录。

最终(通常在20秒左右)它开始插入服务器端。 但是如果我关闭或中断浏览器,已经插入的记录就会明显消失

如何强制插入到服务器端,或者至少监视,以便知道何时通知用户成功

我试过Tracker.flush()没什么区别

我会使用Meteor.method进行服务器端插入,但所有服务器端CSV库的操作都比客户端复杂(我对几乎所有编程都是初学者:)

谢谢


这是我的代码的主要部分(在客户端文件夹中):

Inserting: 39997 -> Joan 
Inserting: 39998 -> Sydnee 
Inserting: 39999 -> Yael 
Inserting: 40000 -> Kirk 
Jescie,Ayala,27/10/82,"P.O. Box 289, 5336 Tristique Road",Dandenong,7903,VI,mus.Proin@gravida.co.uk
Joan,Petersen,01/09/61,299-1763 Aliquam Rd.,Sydney,1637,NS,sollicitudin@Donectempor.ca
Sydnee,Oliver,30/07/13,Ap #648-5619 Aliquam Av.,Albury,1084,NS,Nam@rutrumlorem.ca
Yael,Barton,30/12/66,521 Auctor. Rd.,South Perth,2343,WA,non.cursus.non@etcommodo.co.uk
Kirk,Camacho,25/09/08,"Ap #454-7701 A, Road",Stirling,3121,WA,dictum.eu@morbitristiquesenectus.com
Template.hello.events({
“提交表格”:功能(事件){
event.preventDefault();
var reader=new FileReader();
reader.onload=函数(事件){
var csv=Papa.parse(this.result,{header:true});
var计数=0;
_.forEach(csv.data,function)(csvPerson){
计数++;
人员插入(csvPerson);
log('插入:'+count+'->'+csvPerson.FirstName);
});
};
reader.readAsText(event.target[0]。文件[0]);
}
});

控制台输出的最后几行:

Inserting: 39997 -> Joan 
Inserting: 39998 -> Sydnee 
Inserting: 39999 -> Yael 
Inserting: 40000 -> Kirk 
Jescie,Ayala,27/10/82,"P.O. Box 289, 5336 Tristique Road",Dandenong,7903,VI,mus.Proin@gravida.co.uk
Joan,Petersen,01/09/61,299-1763 Aliquam Rd.,Sydney,1637,NS,sollicitudin@Donectempor.ca
Sydnee,Oliver,30/07/13,Ap #648-5619 Aliquam Av.,Albury,1084,NS,Nam@rutrumlorem.ca
Yael,Barton,30/12/66,521 Auctor. Rd.,South Perth,2343,WA,non.cursus.non@etcommodo.co.uk
Kirk,Camacho,25/09/08,"Ap #454-7701 A, Road",Stirling,3121,WA,dictum.eu@morbitristiquesenectus.com

最后几行CSV(随机生成的数据):

Inserting: 39997 -> Joan 
Inserting: 39998 -> Sydnee 
Inserting: 39999 -> Yael 
Inserting: 40000 -> Kirk 
Jescie,Ayala,27/10/82,"P.O. Box 289, 5336 Tristique Road",Dandenong,7903,VI,mus.Proin@gravida.co.uk
Joan,Petersen,01/09/61,299-1763 Aliquam Rd.,Sydney,1637,NS,sollicitudin@Donectempor.ca
Sydnee,Oliver,30/07/13,Ap #648-5619 Aliquam Av.,Albury,1084,NS,Nam@rutrumlorem.ca
Yael,Barton,30/12/66,521 Auctor. Rd.,South Perth,2343,WA,non.cursus.non@etcommodo.co.uk
Kirk,Camacho,25/09/08,"Ap #454-7701 A, Road",Stirling,3121,WA,dictum.eu@morbitristiquesenectus.com

hello模板显然是一个简单的表单,只需选择并提交文件即可。 客户端代码位于客户端目录下。 在应用程序根目录中的文件中定义的人员。 CSV现在解析为字符串,以避免复杂性。 插入的记录看起来不错,按名称检索,随便什么

控制台中的Person.find().count()浏览器端结果为40000

很高兴发送该文件,该文件只有1.5MB,是随机数据-不敏感。

我认为call()应按如下方式工作:

在客户端

Meteor.call("insertMethod",csvPerson);
服务器端的数据和方法

insertMethod: function(csvPerson){
Person.insert(csvPerson);
}

在Meteor中,在某些情况下,如果不传递回调,操作将同步

如果运行代码
Person.insert(csvPerson)
由于node.js是一个基于事件的服务器,因此一次同步操作就可以停止整个系统。你必须真正关注你的同步操作

对于导入数据,最好的选择是在服务器端的
Meteor.startup(function(){//import code goes here})
中执行

Sindis提出的解决方案有效,但速度较慢,而且如果浏览器关闭(出于某种原因),则无法跟踪已插入的记录。如果您使用Meteor.call(“insertMethod”,csvPerson),此操作将在客户端上同步

初学者场景的最佳选择(非最佳)是:

1-While(您有要插入的记录)

2-呼叫Meteor.Call,无需回拨

3-统计集合中插入的所有字段

4-将此值保存到本地存储

5-返回到步骤1


假设每次插入尝试的插入顺序都相同,则可以这样做。如果浏览器出现故障,您始终可以从localStorage获取值并跳过该数量的记录。

是否删除了autopublish和/或Unsecure软件包?否,autopublish和Unsecure软件包仍然存在,这是否会影响答案?否,仅在您没有autopublish的情况下,如果您需要发布和订阅该集合。在客户端创建服务器未发布的集合意味着在浏览器中创建本地集合。这就是为什么在客户端所有行都被插入,而在另一端,服务器上只能有部分数据,可能是过去运行的数据。尝试在mongo中删除Person数据库,然后重试导入。如果插入后在mongo上看到0条记录,这意味着您没有在客户端上使用已发布的集合。我最终将在服务器端执行此操作,如您所示,但这限制了我对解析库的选择。目前,我正在努力使客户端工作可靠。我想有一种简单的方法可以强制插入,只是还没有找到:)很奇怪,你的方法不起作用,控制台日志是返回所有记录还是只返回插入的记录?谢谢Mário,一旦我“得到它”,我肯定会在服务器端做这件事。您的回答很有帮助,但是->对于当前的解决方案,是否有任何内置方法可以检查客户端或服务器是否有未完成的(异步)操作排队等待处理?理想情况下,是什么让我能够区分正常的DOM/会话内容和这种类型的mongo操作?如果没有,我将结束你的回答,但我想了解我的教育目的的选择:)