gpt4 book ai didi

mongodb - 如何在 Vert.x 中执行顺序 while 循环

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

我有一个用例,比如获取项目的文件夹路径,这样的数据库模式(存储在 MongoDB 中)

Item table: {itemID: 100, itemName: 'Vert.X', parentID: 2}

Category table:
{categoryId:2, categoryName:'Information System', parentID:1}
{categoryId:1, categoryName:'Books', parentID:0}

其中 parentID = 0 是顶级类别(类别表中没有记录)。所以我们应该有一个这样的功能
getItemPathByItemId(100) = 'ROOT > Books > Information System';

用正常方式,我可以做一个 while 循环:
Category getCategoryByID(int categoryID);

int categoryId = 2; // get parent_id of item
StringBuilder s = new StringBuilder();
while (true) {
Category c = getCategoryByID(categoryId);
if (c != null) {
s.append(c.getName());
categoryId = c.getParentId();
}
else {
break;
}
}

我不知道在使用 VertX MongoClient 查询时在 Vert.X 中实现这一点,我有一个方法来获取这样的类别名称
public Future<String> getCategoryName(int categoryId) {
Future<String> future = Future.future();

mongoClient.findOne("category", new JsonObject().put("categoryId", categoryId), null, res -> {
JsonObject obj = res.result();
if (obj != null) {
future.complete(obj.getString("name"));
}
else {
future.complete("ROOT");
}
});

return future;
}

我知道我们可以使用 future.compose() 进行顺序处理,但不确定如何在像这样的 while 循环中实现这一点。谢谢大家阅读。

最佳答案

你快到了。您缺少的是再次递归调用您的函数。
就像是:

public Future<String> getCategoryName(int categoryId) {
Future<String> f = Future.future();
mongoClient.findOne(categoryId, (res) -> {
if (res != null) {
f.complete(getCategoryName(res.parentId).result() + " > " + res.name);
}
else {
f.complete("ROOT");
}
});
return f;
}

我必须说,那些可能的无限循环并不是 future 的最佳用例,但你走了。

关于mongodb - 如何在 Vert.x 中执行顺序 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51302218/

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