假設您正在制作一個簡單的待辦事項應用程式,并且您的結構如下所示:
{
[userId]: {
nextTaskId:3,
tasks: {
1: "take out the trash",
2: "pick up milk"
}
}
添加任務時,我想使用 nextTaskId 創建一個新記錄并增加它。我已經看到其他使用聚合函式的示例,例如 $concat 等,但這不適合我的用例。
我希望能夠在我的更新中參考該欄位,例如:
db.tasks.updateOne({_id:5}, {$inc:{nextId:1}, $set: {"tasks.$nextId":{"new task" }}})
該欄位確實增加了,但是任務鍵不是 3,而是 $nextId,我也嘗試將其用作值,如下所示:
db.tasks.updateOne({_id:5}, {$inc:{nextId:1}, $set: {"tasks.3":{"$nextId" }}})
那也不行。當然,我可以通過進行 2 個單獨的操作來做到這一點,一個是獲取下一個 id 并增加它,另一個是創建新的任務記錄,但我希望通過一個操作來完成。
有任何想法嗎?
uj5u.com熱心網友回復:
您可以使用帶有聚合管道的更新來在單個更新陳述句中實作該行為。使用$objectToArray和$arrayToObject來操作tasks陣列。
db.collection.update({
_id: 5
},
[
{
"$addFields": {
"tasks": {
"$objectToArray": "$tasks"
}
}
},
{
"$addFields": {
"nextTaskId": {
$add: [
"$nextTaskId",
1
]
},
tasks: {
"$concatArrays": [
"$tasks",
[
{
k: {
$toString: "$nextTaskId"
},
// your input for the new task
v: "next task"
}
]
]
}
}
},
{
"$addFields": {
"tasks": {
"$arrayToObject": "$tasks"
}
}
}
])
這是Mongo 游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/384740.html
下一篇:求平均值,MongoDB
