我当前的项目中具有以下文档结构:
[
{
"_id": {"$oid": "5f9a7ed94fea7938c6015e03"},
"ADDRESSES": [
{
"STREET_NUMBER": 99,
"STREET": "Barkey",
"CITY": "Wilmington Island",
"COUNTRY": "Austria"
}
],
"BIRTH_DATE": {"$date": "1967-05-27T00:00:00.000Z"},
"FIRST_NAME": "Wayne",
"ITEM": "employee",
"JOB": "Salesman",
"LAST_NAME": "Bryan",
"WORKDAYS": [
{
"WORK_FROM": {"$date": "2020-10-30T08:31:26.000Z"},
"WORK_TO": {"$date": "2020-10-30T16:31:26.000Z"}
},
{
"WORK_FROM": {"$date": "2021-08-04T11:31:05.000Z"},
"WORK_TO": {"$date": "2021-08-05T00:31:05.000Z"}
},
{
"WORK_FROM": {"$date": "2021-04-13T09:53:34.000Z"},
"WORK_TO": {"$date": "2021-04-13T11:53:34.000Z"}
}
]
}
]
我想查询mongo数据库上的聚合,这就是我的MongoRepository的样子:
@Repository
public interface MongoRep extends MongoRepository<Person, Long> {
@Meta(allowDiskUse = true)
@Aggregation(pipeline = {" " +
"{$unwind: $WORKDAYS},\n" +
" {$unwind: $ADDRESSES},\n" +
" {\n" +
" $group: {\n" +
" _id: $_id,\n" +
" workingHours: {\n" +
" $sum: {$divide: [{$subtract: [$WORKDAYS.WORK_TO, $WORKDAYS.WORK_FROM]}, 3600000]}\n" +
" },\n" +
" age: {\n" +
" $first: { $subtract: [{$year: $$NOW},{$year: $BIRTH_DATE}]}\n" +
" },\n" +
" firstname: {\n" +
" $first: $FIRST_NAME\n" +
" },\n" +
" lastname: {\n" +
" $first: $LAST_NAME\n" +
" },\n" +
" city: {\n" +
" $first: $ADDRESSES.CITY\n" +
" },\n" +
" job: {\n" +
" $first: $JOB\n" +
" }\n" +
" }\n" +
" },\n" +
" {$project: {\n" +
" _id: 0," +
" age: $age,\n" +
" city: $city,\n" +
" firstname: $firstname,\n" +
" lastname: $lastname,\n" +
" workinghours: $workingHours,\n" +
" job: $job,\n" +
"\n" +
" }}"})
public AggregationResults<PersonDTOImpl> findAllAggregated();
这是我的DTO课程:
@Document(collection = "employee")
class PersonDTOImpl(
@Field(name = "age") override val age: Int,
@BsonProperty("city") override val city: String,
@BsonProperty( "firstname") override val firstname: String, @Field(name = "job") override val job: String,
@Field(name = "lastname") override val lastname: String, @Field(name = "workinghours") override val workinghours: Double) : PersonDTOInterface {
}
不幸的是,执行查询时出现异常:
Failed to instantiate PersonDTOImpl using constructor fun <init>(kotlin.Int, kotlin.String, kotlin.String, kotlin.String, kotlin.String, kotlin.Double): at.fhj.swd.kotlintraditionalpostgres.person.mongo.PersonDTOImpl with arguments null,null,null,null,null,null
我试图修改mongo查询以使其在没有投影但没有运气的情况下运行。 在mongo控制台中运行该聚合时,效果很好。
我们非常感谢您的帮助, 谢谢。
编辑: 好像查询返回了错误的(BSON)结果,这是屏幕截图。但是在Mongo控制台中运行该查询时,它会返回正确的结果。