我的文件是
{
_id: 1,
age: "young",
hobby: [
{
vehicle: "car",
velocity: "fast"
},
{
vehicle: "motorcycle",
velocity: "fast"
}
]
}
我的目标是:当年龄变老时,第一个爱好变得“慢”,但其他爱好仍然“快”
我的代码是(在@aneroid帮助之后):
mongoTemplate.updateFirst(
Query.query(where("_id").is("1")),
Update.update("age", "old")
.set("hobby.0.velocity", "slow"), "collection name")
结果还可以。
{
_id: 1,
age: "old",
hobby: [
{
vehicle: "car",
velocity: "slow"
},
{
vehicle: "motorcycle",
velocity: "fast"
}
]
}
但有时爱好未初始化:
{
_id: 1,
age: "young"
}
更新后结果是错误的,因为爱好变成了地图,而不是列表
{
"_id": 1111,
"age": "old",
"hobby": {
"0": {
"velocity": "slow"
}
}
}
在这种情况下是否有可能实现作为清单的爱好?
{
_id: 1,
age: "old",
hobby: [
{
velocity: "slow"
}
]
}
如果你总是只想更新第一个元素,那么你可以用 0
引用
第一个元素。标准查询是:
db.collection.update({ _id: 1111 },
{
$set: {
"age": "old",
"hobby.0.velocity": "slow" // note the '0'
}
})
我不知道spring,但我认为查询会是这样的:
mongoTemplate.updateFirst(
Query.query(where("_id").is("1111")),
Update.update("age", "old")
.set("hobby.0.velocity", "slow") // note the '0'