Java 如何在eventBus vertx2中对mongo的多个集合进行多次查询以获得结果?

Java 如何在eventBus vertx2中对mongo的多个集合进行多次查询以获得结果?,java,mongodb,vert.x,Java,Mongodb,Vert.x,我正在努力提供API,并在mongodb上按月存储数据库中的数据,按日期存储集合中的数据 所以我有dbdb_08_2015然后我有31个从date_01到date_31 我必须查询从第1天到第10天的数据才能得到总的花费,所以我需要像这样发送31个请求 我的问题是,在我返回客户端之前,如何通过一个请求同时获取数据,比如将同步请求输入mongo以获取结果。 比如我有date\u 01=10然后date\u 02=20。。。在返回客户之前,我想把所有这些加起来 vertx.eventBus().se

我正在努力提供API,并在mongodb上按月存储数据库中的数据,按日期存储集合中的数据

所以我有db
db_08_2015
然后我有31个从
date_01
date_31
我必须查询从第1天到第10天的数据才能得到总的花费,所以我需要像这样发送31个请求

我的问题是,在我返回客户端之前,如何通过一个请求同时获取数据,比如将同步请求输入mongo以获取结果。 比如我有date\u 01=10然后date\u 02=20。。。在返回客户之前,我想把所有这些加起来

vertx.eventBus().send("mongodb-persistor", json, new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> message) {
                    logger.info(message.body());
                    JsonObject result = new JsonObject(message.body().encodePrettily());
                    JsonArray r = result.getArray("results");
                    if (r.isArray()) {
                        if (r.size() > 0) {
                            String out = r.get(0).toString();
                            req.response().end(out);
                        } else {
                            req.response().end("{}");
                        }
                    } else {
                        req.response().end(message.body().encodePrettily());
                    }
                }
            });
vertx.eventBus(){
@凌驾
公共无效句柄(消息){
logger.info(message.body());
JsonObject结果=新的JsonObject(message.body().encodePrettly());
JsonArray r=result.getArray(“results”);
if(r.isArray()){
如果(r.size()>0){
String out=r.get(0.toString();
请求响应()结束(输出);
}否则{
response().end(“{}”);
}
}否则{
req.response().end(message.body().encodeprettly());
}
}
});

我认为在您的情况下,采用不同的方法对数据建模可能会更好。 在分析方面,我建议采用以下引用的lambda体系结构方法:

  • 所有进入系统的数据都被发送到批处理层和速度层进行处理
  • 批处理层有两个功能:(i)管理主数据集(一组不可变的、仅追加的原始数据)和(ii)预计算 批处理视图
  • 服务层对批处理视图进行索引,以便以低延迟的特殊方式查询它们
  • 速度层补偿服务层更新的高延迟,并且只处理最近的数据
  • 任何传入的查询都可以通过合并来自批处理视图和实时视图的结果来回答
考虑到上述情况,为什么不创建一个聚合集合,以查询所需的格式保存聚合数据,同时以您描述的格式保存原始副本

通过这样做,您将以所需的查询格式查看数据,并在系统发生故障时重新创建聚合数据


图表和引号的参考资料-

您已经说了了解您自己的全部内容。您的集合是独立的,因此您需要编写逻辑代码以在API中聚合自己,而不是由数据库完成所有工作。这意味着对数据库的多次调用。我很难看出这是一个好的设计,甚至是规模所必需的。事实上,这就是为什么像“切分”这样的解决方案存在,以允许分布式负载。即使只有一个收藏。@BlakesSeven谢谢你的推荐,但就我而言,数据太多了,我必须把它分为日期。你不是唯一一个这样做的人。要点很简单。尤其是MongoDB一次只能处理一个集合,因此排除了您希望进行的聚合中的任何“数据库帮助”。如果您想要最高效的数据库端,那么使用一个单一的集合并查看其他扩展方法。否则,仅检索和聚合读取的原始数据以及多次读取就完全取决于您的代码。这里的聚合是一个简单的概念。就像HashMap一样,不断积累匹配键上的数据。“但是你仍然需要提出很多要求。”布莱克斯七:非常感谢,我理解你的想法。我的想法完全错误,我们需要一个集合来存储要查询的聚合结果,而db_month coll_day只用于存储原始数据。