其中一个字段包含一个名称范围数组,其中每个元素都可以包含十进制值的数据。但是,这些字段也可以为空。该数组可以是任何大小。我需要将值四舍五入为整数。
document
结构示例:
{
"state" : {
"aggregation" : {
"ranges" : [
{
"areaRange" : {
"range" : {
"from" : 11.54815694,
"to" : 22.09873028
}
}
},
...
]
}
}
}
我的java代码:
Query query = Query.query(Criteria.where("signalState.aggregation.ranges").exists(true).ne(null))
.addCriteria(Criteria.where("state.aggregation.ranges.areaRange.range.from").exists(true).ne(null));
Update update = new Update().set(
"state.aggregation.ranges.$.areaRange.range.from",
ArithmeticOperators.Round.roundValueOf("state.aggregation.ranges.$.areaRange.range.from").place(1)
);
var result = mongoTemplate.updateMulti(query, update, State.class);
log.info("Matched {}, Modified {}", result.getMatchedCount(), result.getModifiedCount());
但是它不起作用并抛出异常:
Write operation error on server localhost:52053. Write error: WriteError{code=52, message='The dollar ($) prefixed field '$round' in 'state.aggregation.ranges.0.areaRange.range.from.$round' is not valid for storage.', details={}}.; nested exception is com.mongodb.MongoWriteException: Write operation error on server localhost:52053. Write error: WriteError{code=52, message='The dollar ($) prefixed field '$round' in 'state.aggregation.ranges.0.areaRange.range.from.$round' is not valid for storage.', details={}}.
org.springframework.dao.DataIntegrityViolationException: Write operation error on server localhost:52053. Write error: WriteError{code=52, message='The dollar ($) prefixed field '$round' in 'state.aggregation.ranges.0.areaRange.range.from.$round' is not valid for storage.', details={}}.; nested exception is com.mongodb.MongoWriteException: Write operation error on server localhost:52053. Write error: WriteError{code=52, message='The dollar ($) prefixed field '$round' in 'state.aggregation.ranges.0.areaRange.range.from.$round' is not valid for storage.', details={}}.
at app//org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:117)
at app//org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:3044)
at app//org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:600)
at app//org.springframework.data.mongodb.core.MongoTemplate.doUpdate(MongoTemplate.java:1735)
at app//org.springframework.data.mongodb.core.MongoTemplate.updateMulti(MongoTemplate.java:1671)