你能用 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} } })
这不是吗啡,但你已经明白了。
我正在使用 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} } })
这不是吗啡,但你已经明白了。