mongodb 里面 对标 mysql 的 case when 是怎么查询的,找了半天没找到实用的。用 mongotemplate 怎么写,麻烦有没有大佬给个资料或者直接指点一下。
我想按照这个 startTime ,每天分组求和, 把 6 点到 9 点的 flowInNum 字段数据求和然后给个新字段 monring 都默认是早上 把 11 点到 13 点的 flowInNum 字段数据求和然后给个新字段 afternoon 都默认是中午 把 18 点到 20 点的 flowInNum 字段数据求和然后给个新字段 night 都默认是晚上
1
libook 2021-10-28 14:50:37 +08:00
用 MongoDB 要先明确:
1. 抛弃原有关系型数据库的思维,用文档型数据库自己的思维模式来建模; 2. 具有强关系模型属性的数据不要用非关系型数据库,同理在关系模型下难以使用的数据结构可以考虑是否有对应的非关系模型更适合。 看题主的描述,推测题主希望将数据按照 startTime 来标记时间段为早、中、晚,可以使用聚合功能 aggregate 中的$switch 操作符。但具体好不好用还要看你分组之后要做什么操作。 另外注意数据库里通常使用 ISODate 格式存储的,你若关心北京时间要进行时区换算。 |
2
catinsides 2021-10-28 15:00:48 +08:00
先用$addFields 和$cond 标记出每条数据是早上、下午还是晚上,再用$group 根据早中晚分组,最后用$reduce 统计 flowInNum
|
3
yinft OP @catinsides 我用 Aggregation 这个类只有 project 方法没有看到 addFields 方法。。。
|
5
libook 2021-10-28 16:12:47 +08:00
@yinft #4 MongoDB 还是具备较好的数据统分能力的,在 MongoDB 创办初期就是以轻度大数据能力作为卖点。当然数据规模达到一定程度(如 1TB 以上)可能就得使用专门的大数据架构了。
|
6
hongweiliuruige 2021-10-28 16:44:21 +08:00
$project $addFields 都有啊,mongodb 的 aggregate 很强大。。。多看看文档吧
|
7
yinft OP @hongweiliuruige 麻烦能指点一下代码怎么实现么,可以大致写一下么
|