Mongo DB Java Driver Cursor 不包含完整的集合
Mongo DB Java Driver Cursor Doesn't contain full Collection
我目前有一个游标正在遍历 MongoDB 集合并取出几个不同的值并将它们添加到另一个 table。但是我注意到,当进程 运行ning 时,光标并未覆盖集合中的所有文档(通过添加计数器发现)。
Beacon Lookup Collection 有 3342 个文档,但从日志中我只能看到它迭代了其中的 1114 个,并且在调试时光标处没有 error.Looking 结束光标,它确实包含所有 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();
}
}
任何建议都很好!
您在每次迭代中调用 next()
多次。
改变
int major = (Integer) beaconLookupCursor.next().get("MAJOR");
int minor = (Integer) beaconLookupCursor.next().get("MINOR");
到
Document doc = beaconLookupCursor.next();
int major = (Integer) doc.get("MAJOR");
int minor = (Integer) doc.get("MINOR");
看来还有一个要求 UUID 的请求。也用 doc
参考更新它。
我目前有一个游标正在遍历 MongoDB 集合并取出几个不同的值并将它们添加到另一个 table。但是我注意到,当进程 运行ning 时,光标并未覆盖集合中的所有文档(通过添加计数器发现)。
Beacon Lookup Collection 有 3342 个文档,但从日志中我只能看到它迭代了其中的 1114 个,并且在调试时光标处没有 error.Looking 结束光标,它确实包含所有 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();
}
}
任何建议都很好!
您在每次迭代中调用 next()
多次。
改变
int major = (Integer) beaconLookupCursor.next().get("MAJOR");
int minor = (Integer) beaconLookupCursor.next().get("MINOR");
到
Document doc = beaconLookupCursor.next();
int major = (Integer) doc.get("MAJOR");
int minor = (Integer) doc.get("MINOR");
看来还有一个要求 UUID 的请求。也用 doc
参考更新它。