我正在使用 Spring Data MongoTemplate,試圖優化 mongodb 更新。我可以只進行 1 次更新而不find()先檢查statusdb 中的檔案嗎:
- 如果狀態不是“已阻止”,則更新狀態并添加到操作中。
- 如果狀態為“已阻止”,只需添加到操作中,而不是更新到狀態。
Java object to update:
status: "Display",
action: "Show"
mongodb:
{
status: "Blocked",
actions: [
"Show",
"Hide",
"Show",
...
]
}
uj5u.com熱心網友回復:
您可以使用聚合管道進行更新。對$addFields舞臺中的狀態欄位進行條件檢查。
db.collection.update({},
[
{
"$addFields": {
"userInput": {
status: "Display",
action: "Show"
}
}
},
{
"$addFields": {
"status": {
"$cond": {
"if": {
$ne: [
"$status",
"Blocked"
]
},
"then": "$userInput.status",
"else": "Blocked"
}
},
actions: {
"$concatArrays": [
[
"$userInput.action"
],
"$actions"
]
}
}
},
{
"$unset": "userInput"
}
],
{
multi: true
})
這是Mongo 游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/390136.html
標籤:爪哇 MongoDB mongodb-查询 spring-data-mongodb
