我正在使用Morphia访问我的mongoDB。
我的一个集合中有一个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 }
是否可以使用morphia汇总Java8 LocalDateTime?
答案 0 :(得分:1)
注意你的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} } })
这不是吗啡,但你已经明白了。