我现在有一个游标,它正在遍历mongodb集合,取出几个不同的值,并将它们添加到另一个表中。但是,我注意到,当进程运行时,游标并没有覆盖集合中的所有文档(通过添加counter发现)。
beacon lookup集合有3342个文档,但是从日志中我只能看到它迭代了1114个文档,并且完成了游标,没有任何错误。调试时查看游标确实包含所有3343个文档。
以下是我正在尝试运行的方法,但目前存在问题:
public void flattenCollection(){
MongoCollection<Document> beaconLookup = getCollection("BEACON_LOOKUP");
MongoCollection<Document> triggers = getCollection("DIM_TRIGGER");
System.out.println(beaconLookup.count());
// count = 3342
long count = beaconLookup.count();
MongoCursor<Document> beaconLookupCursor = beaconLookup.find().batchSize((int) count).noCursorTimeout(true).iterator();
MongoCursor<Document> triggersCursor = triggers.find().iterator();
try {
while (beaconLookupCursor.hasNext()) {
int major = (Integer) beaconLookupCursor.next().get("MAJOR");
int minor = (Integer) beaconLookupCursor.next().get("MINOR");
if(major==1215) {
System.out.println("MAJOR " + major + " MINOR " + minor);
}
triggers.updateMany(and(eq("MAJOR", major),
eq("MINOR", minor)),
combine(set("BEACON_UUID",beaconLookupCursor.next().get("UUID"))));
count = count - 1;
System.out.println(count);
}
} finally {
beaconLookupCursor.close();
}
}
任何建议都太好了!
1条答案
按热度按时间ux6nzvsh1#
你在打电话吗
next()
每次迭代不止一次。改变
至
看来还有一个关于uuid的电话。更新为
doc
参考号也是。