使用Java驱动器在MongoDB数据库中插入文档时出现多个循环

使用Java驱动器在MongoDB数据库中插入文档时出现多个循环,java,matlab,mongodb,Java,Matlab,Mongodb,首先,这是我使用mongoDB的第一个应用程序,我也不是Java专家。我正在使用Java库与Matlab 下面是给我带来麻烦的代码示例: javaaddpath('C:\Users\######\Documents\MATLAB\JAR\mongo-2.10.1.jar') import com.mongodb.*; mongoClient = MongoClient(); db = mongoClient.getDB( 'MonroeLossErrorDB' ); coll = db.getC

首先,这是我使用mongoDB的第一个应用程序,我也不是Java专家。我正在使用Java库与Matlab

下面是给我带来麻烦的代码示例:

javaaddpath('C:\Users\######\Documents\MATLAB\JAR\mongo-2.10.1.jar')
import com.mongodb.*;
mongoClient = MongoClient();
db = mongoClient.getDB( 'MonroeLossErrorDB' );
coll = db.getCollection('Traces');

fileList = getFiles();
for i=1:350
   file = fielList{i};
   [x, samples] = getSamples(file);
   doc = BasicDBObject();
   doc.put('filename', file);
   doc.put('samples',samples)
   doc.put('x',x);
   coll.insert(doc,WriteConcern.SAFE);
end
一切正常,当我检查数据库时,确实有350个元组(文档),但是。。。。 执行脚本需要很多时间。我把它限制在350,但有成千上万的循环我想做。当我调试脚本时,我注意到由于某些原因,循环从I=1重新启动,就像在某个地方脚本被反复调用一样。例如,在迭代22之后,脚本重新启动,然后在迭代46之后再次重新启动。当我停止当前进程时,我将返回到在迭代#46时停止的前一个进程。当这个脚本也停止时,我将返回到在迭代#22时停止的前一个脚本,如果我再次停止它,最后整个脚本将结束

是否有与数据库文件大小相关的链接?我的意思是,mongoDB从16MB开始,然后是32MB,以此类推。这是否意味着在填充第一个文件后,再次执行脚本以填充一个更大的文件,然后重新启动另一个更大的文件,依此类推,直到该文件可以包含所有文档


为什么我的脚本在结束之前要重新启动很多次?

我绝不是一个DB专家,但是如果你进行大容量插入,索引会减慢你的速度。也许在加载数据后添加它们会更好。至于重启问题,听起来确实很奇怪。您可以在每次迭代中添加一个更新的,这样您就可以知道循环变量
i
是否发生了任何奇怪的事情,只需一条注释-在使用2.10版本的MongoDB驱动程序时,您不需要使用WriteConcern.SAFE,这是默认值。您可以简单地使用coll.insert(doc)是否可能有人多次调用此脚本?即,问题不在脚本本身,但是否多次调用此脚本?您好。谢谢你的评论。不幸的是,这个脚本是独立的,没有人在外部调用它。我添加了writeconcern以确保它处于安全模式,因为在调试时,循环被多次调用,我想知道这是否是在db中写入的错误。lopp重新启动的时刻是随机的。上次我尝试时,一切都很顺利,循环只运行了一次。。。很奇怪。