gpt4 book ai didi

java - Mongodb Java驱动程序游标不包含完整集合

转载 作者:行者123 更新时间:2023-12-02 03:08:04 25 4
gpt4 key购买 nike

我目前有一个游标正在遍历 MongoDB 集合,并取出几个不同的值并将它们添加到另一个表中。但是我注意到,当进程运行时,光标没有覆盖集合中的所有文档(通过添加计数器发现)。

Beacon Lookup Collection 有 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();
}
}

任何建议都会很棒!

最佳答案

每次迭代您都会多次调用 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 引用更新它。

关于java - Mongodb Java驱动程序游标不包含完整集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com