V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
yinft
V2EX  ›  MongoDB

mongodb 查询问题

  •  
  •   yinft · 344 天前 · 1419 次点击
    这是一个创建于 344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mongodb 里面 对标 mysql 的 case when 是怎么查询的,找了半天没找到实用的。用 mongotemplate 怎么写,麻烦有没有大佬给个资料或者直接指点一下。 4346e3eb11bd4d389afeabbd916c121.png

    我想按照这个 startTime ,每天分组求和, 把 6 点到 9 点的 flowInNum 字段数据求和然后给个新字段 monring 都默认是早上 把 11 点到 13 点的 flowInNum 字段数据求和然后给个新字段 afternoon 都默认是中午 把 18 点到 20 点的 flowInNum 字段数据求和然后给个新字段 night 都默认是晚上

    7 条回复    2021-10-28 17:25:11 +08:00
    libook
        1
    libook  
       344 天前
    用 MongoDB 要先明确:
    1. 抛弃原有关系型数据库的思维,用文档型数据库自己的思维模式来建模;
    2. 具有强关系模型属性的数据不要用非关系型数据库,同理在关系模型下难以使用的数据结构可以考虑是否有对应的非关系模型更适合。

    看题主的描述,推测题主希望将数据按照 startTime 来标记时间段为早、中、晚,可以使用聚合功能 aggregate 中的$switch 操作符。但具体好不好用还要看你分组之后要做什么操作。

    另外注意数据库里通常使用 ISODate 格式存储的,你若关心北京时间要进行时区换算。
    catinsides
        2
    catinsides  
       344 天前
    先用$addFields 和$cond 标记出每条数据是早上、下午还是晚上,再用$group 根据早中晚分组,最后用$reduce 统计 flowInNum
    yinft
        3
    yinft  
    OP
       344 天前
    @catinsides 我用 Aggregation 这个类只有 project 方法没有看到 addFields 方法。。。
    yinft
        4
    yinft  
    OP
       344 天前
    @libook 接手的项目,其实我仰压根就觉得这种后期大量统计的数据不适合存 mongo
    libook
        5
    libook  
       344 天前
    @yinft #4 MongoDB 还是具备较好的数据统分能力的,在 MongoDB 创办初期就是以轻度大数据能力作为卖点。当然数据规模达到一定程度(如 1TB 以上)可能就得使用专门的大数据架构了。
    hongweiliuruige
        6
    hongweiliuruige  
       344 天前
    $project $addFields 都有啊,mongodb 的 aggregate 很强大。。。多看看文档吧
    yinft
        7
    yinft  
    OP
       344 天前
    @hongweiliuruige 麻烦能指点一下代码怎么实现么,可以大致写一下么
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   980 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 22:58 · PVG 06:58 · LAX 15:58 · JFK 18:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.