您好,我想在春季使用此 mongo 查詢將型別欄位從字串更改為雙精度:
db.getCollection("data").update(
{
"location.latitude": { $type: 2 },
"location.longitude": { $type: 2 }
},
[{
$set: {
"location.latitude": { $toDouble: "$geolocation.latitude" },
"location.longitude": { $toDouble: "$geolocation.longitude" }
}
}]
)
模型:
data class Data(
@Id
val id: ObjectId,
val location: Location,
)
我在春天的代碼:
mongoTemplate.updateMulti(
Query()
.addCriteria(Criteria.where("data.latitude").`is`("\$type:2"))
.addCriteria(Criteria.where("data.longitude").`is`("\$type:2")),
Update()
.set("location.latitude", ConvertOperators.ToDouble.toDouble("\$location.latitude"))
.set("location.longitude", ConvertOperators.ToDouble.toDouble("\$location.longitude")),
"data"
)
但它會產生類似的東西:
db.getCollection("data").update(
{
"location.latitude": "$type:2",
"location.longitude": "$type:2"
},
{
"$set": {
"location.latitude": { "$toDouble": "$geolocation.latitude" },
"location.longitude": { "$toDouble": "$geolocation.longitude" }
}
}
)
但它不正確
uj5u.com熱心網友回復:
您需要type在spring中使用功能而不是is檢查type
參考
Criteria.where("data.latitude").type(2)
對于第二個問題,正如@YongShun 指出的,您需要使用AggregationUpdate
AggregationUpdate.update()
.set("location.latitude", ConvertOperators.ToDouble.toDouble("\$location.latitude"))
.set("location.longitude", ConvertOperators.ToDouble.toDouble("\$location.longitude"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482839.html
標籤:mongodb mongodb查询 弹簧数据 spring-mongodb
