首先,我已閱讀this stack overflow entry,它部分解決了此問題,但我需要動態添加多個條目,並且無法將答案應用於此問題。使用多個值部分更新嵌套對象Express.js MongoDB
我有一個網站有民意調查(使用express和mongodb驅動程序),我希望用戶在提交後能夠向民意調查添加其他選項(他們只能添加其他項目,他們不能編輯先前存在的項目)。
所有選項(可能的答案)被標記爲answer
後跟一個數字(最多5個)。
所以在數據庫中,我們有:那麼,這一行
{
"_id": {
"$oid": "58cdf0023cefa56136afb50f"
},
"question": "Who is the best Bob?",
"options": {
"answer1": {
"option": "Bob Dylan",
"votes": 2
},
"answer2": {
"option": "Bob Geldof",
"votes": 0
}
}
}
,用戶最多可以添加三個額外的答案選項。
當我硬編碼額外的答案名稱(例如在這個數據庫示例answer3
)我可以更新嵌套的options
屬性。
var toInsert = { options:
{ answer3: { option: 'Bob Saget', votes: 0 },
answer4: { option: 'Bob Marley', votes: 0 } } }
db.collection('questions')
.findOneAndUpdate({"_id": questionId}, {$set : {'options.answer3': [toInsert.answer3]}}, {upsert: true}, (err, result) => {
if (err) return res.send(err)
res.send("worked");
})
編輯︰我剛剛意識到他有一個錯誤,所以我甚至不能硬編碼正確的答案。但是,爲了清晰起見,我將在此留出。
但我需要做的是動態更新嵌套的options
對象,其中包含1-3個可能的新選項(取決於用戶想要的內容),並將預先存在的數據保留在options
對象中。在上面的示例代碼中,我想從toInsert
插入answer3
和answer4
。
我對Node和MongoDB非常陌生,我的想法是「嘿,我可以通過一個for loop
」,即使我能夠實現它,它似乎也是一個糟糕的主意。