用于计算百分比的 MongoDB 查询

如何解决用于计算百分比的 MongoDB 查询

我是 MongoDB 的新手,有点卡在这查询上。任何帮助/指导将不胜感激。我无法以所需的方式计算百分比。我的管道有问题,百分比的先决条件没有正确计算。下面我提供了我的失败尝试以及所需的输出

集合中的单个条目如下所示:

_id : ObjectId("602fb382f060fff5419fd0d1")
time : "2019/05/02 00:00:00"
station_id : 3544
station_name : "Underhill Ave &; Pacific St"
station_status : "In Service"
latitude : 40.6804836
longitude : -73.9646795
zipcode : 11238
borough : "brooklyn"
neighbourhood : "Prospect Heights"
available_bikes : 5
available_docks : 21

我要解决查询是:

Given a station_id (e.g.,522) and a num_hours (e.g.,3) passed as parameters:

 - Consider only the measurements where the station_status = “In Service”. 
 - Consider only the measurements for that concrete
   “station_id”. 
 - Compute the percentage of measurements with
   available_bikes = 0 for each hour of the day (e.g.,for the period
   [8am,9am) the percentage is 15.06% and for the period [9am,10am)
   the percentage is
   27.32%). 
 - Sort the percentage results in decreasing order. 
 - Return the top “num_hours” documents.

所需的输出是:

--- DOCUMENT 0 INFO ---
---------------------------------
hour : 19
percentage : 65.37
total_measurements : 283
zero_bikes_measurements : 185
---------------------------------
--- DOCUMENT 1 INFO ---
---------------------------------
hour : 21
percentage : 64.79
total_measurements : 284
zero_bikes_measurements : 184
---------------------------------
--- DOCUMENT 2 INFO ---
---------------------------------
hour : 00
percentage : 63.73
total_measurements : 284
zero_bikes_measurements : 181

我的尝试是:

 command_1 = {"$match": {"station_status": "In Service","station_id": station_id,"available_bikes": 0}}
    my_query.append(command_1)

    command_2 = {"$group": {"_id": "null","total_measurements": {"$sum": 1}}}
    my_query.append(command_2)  

    command_3 = {"$project": {"_id": 0,"station_id": 1,"station_status": 1,"hour": {"$substr": ["$time",11,2]},"available_bikes": 1,"total_measurements": {"$sum": 1}
                              }
                 }
    my_query.append(command_3)

    command_4 = {"$group": {"_id": "$hour","zero_bikes_measurements": {"$sum": 1}}}
    my_query.append(command_4)

    command_5 = {"$project": {"percent": {
                                  "$multiply": [{"$divide": ["$total_measurements","$zero_bikes_measurements"]},100]}}}

    my_query.append(command_5)

解决方法

我已经看过这个,我将提供一些真诚的建议:

不要尝试在聚合查询中执行此操作。只需回归基础并使用 find() 提取数字,然后在 python 中计算数字。

如果您想坚持使用聚合查询,我会说您的 match 命令过滤 available_bikes 等于 0。您永远无法获得测量的总数,因此您永远无法找到百分比。此外,当您完成第一个 $group 时,您“丢失”了您的投影,因此在管道中的那个点您只有 total_measurements,仅此而已(注释掉命令 3 到 5 以了解我的意思).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?