如何解决引用“ _id”无效!春天数据中的错误mongodb
我已经在spring数据mongodb中编写了聚合查询。在投影步骤中,我想使用“ _id”字段,但是会出现错误。
我的投影阶段:
private ProjectionOperation getProjectionForStartAndEndTime(long timeUnit) {
return Aggregation.project()
.and(Fields.UNDERSCORE_ID)
.as("startTime")
.and(Add.valueOf(Fields.UNDERSCORE_ID).add(timeUnit))
.as("endTime")
.andInclude("successfulActivitiesCount","failedActivitiesCount","heartBeatFailuresCount");
}
在此之前,我想知道这可能是原因吗?
private BucketOperation getBucketOperation(TimeGroupType timeGroupType,long startTime,long endTime) {
List<Long> timeIntervalList = getBoundariesForAggregating(timeGroupType,startTime,endTime);
return bucket(ActivityHistoryEntityKeys.activityTime)
.withBoundaries(timeIntervalList.toArray())
.andOutput(isSuccessfulActivityField)
.sum()
.as(NGActivitySummaryKeys.successfulActivitiesCount)
.andOutput(isFailedActivityField)
.sum()
.as(NGActivitySummaryKeys.failedActivitiesCount)
.andOutput(isConnectivityFailureField)
.sum()
.as(NGActivitySummaryKeys.heartBeatFailuresCount);
}
错误是:
java.lang.IllegalArgumentException: Invalid reference '_id'!
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:114)
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:77)
at org.springframework.data.mongodb.core.aggregation.ProjectionOperation$ProjectionOperationBuilder$FieldProjection.renderFieldValue(ProjectionOperation.java:1445)
at org.springframework.data.mongodb.core.aggregation.ProjectionOperation$ProjectionOperationBuilder$FieldProjection.toDocument(ProjectionOperation.java:1432)
_id
字段将始终存在于文档中,然后为什么给出无效的引用。
我认为Spring数据MongoDB中也存在类似的错误,但此问题已在1.4.1中修复,我正在使用 2.2.7。
抱歉,由于代码本身失败,我无法生成确切的聚合查询。
我在MongoDB Shell上执行存储操作之后尝试了该项目步骤,它通过了。所以对我来说,这似乎是我编写的spring-data代码中的问题。
请建议我如何解决此问题。
其他:
我的记录如下:
/* 1 */
{
"_id" : ObjectId("5f92caaab3823704a346766b"),"accountIdentifier" : "accountIdentifier","type" : "ENTITY_USAGE",//other value is `CONNECTIVITY_CHECK`
"activityStatus" : "SUCCESS","activityTime": 1603115723209
}
有效的monogodb查询:
db.getCollection('entityActivity').aggregate([
{
"$bucket" :
{
"boundaries" : [1603115723209,1603202123209,1603288523209,1603374923209,1603461323209,1603547723209],"default": 0,"groupBy" : "$activityTime","output" : {
"successfulActivitiesCount" : { "$sum" : "$isSuccessfulActivity"},"failedActivitiesCount" : { "$sum" : "$isFailedActivity"},"heartBeatFailuresCount" : { "$sum" : "$isConnectivityFailure"}
}
}
},{
"$project":
{
"startTime": "$_id","successfulActivitiesCount": 1
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。