Java 查找MongoDB集合中的所有文档需要很长时间

Java 查找MongoDB集合中的所有文档需要很长时间,java,mongodb,performance,Java,Mongodb,Performance,我的数据库中有一个空集合,我刚刚开始处理它(很明显),我有一些日志消息,这些消息打印出循环遍历该集合中所有文档所需的时间。问题是,即使是一个空集合,也需要大约100毫秒才能完成加载所有集合。这只发生在一个集合中,而不是我的另一个集合(参见屏幕截图) 这是我装载帮派的代码 private void loadGangs() { long now = System.currentTimeMillis(); int amount = 0; for (Document docum

我的数据库中有一个空集合,我刚刚开始处理它(很明显),我有一些日志消息,这些消息打印出循环遍历该集合中所有文档所需的时间。问题是,即使是一个空集合,也需要大约100毫秒才能完成加载所有集合。这只发生在一个集合中,而不是我的另一个集合(参见屏幕截图)

这是我装载帮派的代码

private void loadGangs() {
    long now = System.currentTimeMillis();
    int amount = 0;

    for (Document document : gangsCollection.find()) {
        loadGang(document);
        amount++;
    }

    Core.log("Loaded &e" + amount + " &fgang" + (amount == 1 ? "" : "s") + " in &e" + (System.currentTimeMillis() - now) + "ms.");
}

private void loadGang(Document document) {
    Gang gang = new Gang(document.getString("_id"), UUID.fromString(document.getString("leader")));

    List<UUID> members = Lists.newArrayList();

    for (String uuidAsString : (ArrayList<String>) document.get("members")) {
        members.add(UUID.fromString(uuidAsString));
    }

    gang.setMembers(new HashSet<>(members));
}
当涉及到查询时,两者都相对相似,但是加载帐户所花费的时间要比加载帐户所花费的时间多得多,即使两个集合都是空的。我该怎么办? 谢谢


编辑/旁注:一切都很完美,我只关心这里的性能,特别是当需要1000多个不同的帐户和/或帮派时。

两个
find()
条件都是完全不绑定的,没有条件,并且您正在通过调用迭代列表。那不好。你到底想在这里做什么?您可能正在进行某种服务器端聚合,这种聚合当然可以在服务器上执行,而不是返回所有文档。为什么您不能直接构建哈希集,而不是首先构建列表?我觉得这不像MongoDB的问题。代码
loadGang
loadAccount
做不同的事情,因此您无法直接比较它们。我相信计时不仅计算MongoDB返回结果的时间,还可以作为一个整体测量这两个函数的计时。
private void loadAccounts() {
    long now = System.currentTimeMillis();
    int amount = 0;

    for (Document document : accountsCollection.find()) {
        loadAccount(document);
        amount++;
    }

    Core.log("Loaded &e" + amount + " &faccount" + (amount == 1 ? "" : "s") + " in &e" + (System.currentTimeMillis() - now) + "ms.");
}

private void loadAccount(Document document) {
    Account account = new Account(UUID.fromString(document.getString("_id")));

    if (document.containsKey("gang")) {
        account.setGang(Gang.getGang(document.getString("gang")));
    }
}