你能用 Morphia 聚合 MongoDb 中的 LocalDateTime 吗

Can you Aggregate LocalDateTime in MongoDb with Morphia

我正在使用 Morphia 访问我的 mongoDB。

我的一个 collections 的 lastUpdatedTimestamp 声明为 Java8 LocalDateTime。

我正在使用这个 java 代码:-

Iterator<CountResult> iterator = datastore.createAggregation(MyClass.class).group(Arrays.asList(Group.grouping("$year", "timestamp")), Group.grouping("count", new Accumulator("$sum", 1))).aggregate(CountResult.class);

我希望根据 $year $month $day $hour 来汇总我的数据,但是尝试 $hour 或 $year 我得到这个异常

com.mongodb.MongoCommandException: Command failed with error 16006: 'can't convert from BSON type EOO to Date' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "can't convert from BSON type EOO to Date", "code" : 16006 }

是否可以将 Java8 LocalDateTime 与吗啡聚合?

注意您的 LocalDateTime 如何存储在 mongodb 文档结构中。

        "lastUpdatedTimestamp": {
        "date": {
            "year": NumberInt("2016"),
            "month": NumberInt("11"),
            "day": NumberInt("3")
        },
        "time": {
            "hour": NumberInt("4"),
            "minute": NumberInt("55"),
            "second": NumberInt("43"),
            "nano": NumberInt("0")
        }
    }

可能字段lastUpdatedTimestamp是对象,里面有两个对象:日期和时间,每个都有对应的整数。

在这种情况下,您应该查询并汇总此类字段,如下例

db.MyClass.aggregate(
{"$group" : { "_id": "$lastUpdatedTimestamp.date.day", "count": { "$sum": 1 } } },
{"$match": {"count" : {"$gt": 1} } })

这不是吗啡,但你已经明白了。