gpt4 book ai didi

java - MongoDB 与 Morphia 的日常分组

转载 作者:行者123 更新时间:2023-11-30 03:21:48 25 4
gpt4 key购买 nike

我有一个 MongoDB,它用 Morphia 存储简单的 Pojo:

@Entity
private static class Task{
@Id
private ObjectId id;
private Date timestamp;
private int task;
}

我想要做的是获取每天的任务总数。我遇到了处理日期的问题,以便它们将投影到一天(01-07-2015 00:00:00:00),而不是带有秒和毫秒的完整日期。

可能的解决方案:

  1. 每天我都必须进行单独的聚合,但我不想这样做。
  2. 从此link我想出了一个像这样的函数的想法

    (timestamp.toMilliseconds() / (1000 * 60 * 60 * 24) * (1000 * 60 * 60 * 24)).toDate()

这样日子就会四舍五入,但我不知道如何使用 Morphia 和 java 来做到这一点。我对此很陌生,仍在寻找一种对日期进行操作的方法,但网上有用的教程很少。

  • 将时间戳投影为年、月、日 3 列,然后进行一些分组。但一天只写 3 篇专栏的想法对我来说实在不愉快。
  • 请大家帮忙,非常感谢!

    最佳答案

    终于我能找到一些东西了,是关于第二种方法的。由于mongo不支持像timestamp.toMilliseconds()这样的操作,我需要获取日期的每个组成部分并将它们计算为毫秒,就像link一样提到过。

        Projection ms = expression("$millisecond", projection("timestamp"));
    Projection secToMs = multiply(expression("$second", projection("timestamp")), SEC_TO_MS);
    Projection minToMs = multiply(expression("$minute", projection("timestamp")), MIN_TO_MS);
    Projection hourToMs = multiply(expression("$hour", projection("timestamp")), H_TO_MS);
    Projection sum = add(ms, secToMs, minToMs, hourToMs);
    Projection dayRounded = subtract(projection("timestamp"), sum);

    然后我剩下要做的就是

    datastore.createAggregation(Task.class).project(projection("timestamp",dayRounded)).aggregate(OutputClass.Class);

    希望这对某人有用。如果有人找到更好的解决方案请告诉我。

    关于java - MongoDB 与 Morphia 的日常分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157715/

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