[英]Update document in array MongoDB
我知道這個問題以前已經通過各種方式提出過,但是我已經閱讀了所有內容,但無法在以下情況下使用:
這是一個doc示例:
"_id" : ObjectId("583659c5be5f0e6f70c95633"),
"firstName" : "da",
"lastName" : "ksk",
"email" : "papap@aol.com",
"surveyResults" : [
{
"mouseTracking" : [ ],
"result" : "White",
"question" : "What color website do you prefer?",
"questionNumber" : "0"
},
{
"mouseTracking" : [ ],
"result" : "Laptop",
"question" : "What device do you use most to browse the web?",
"questionNumber" : "1"
}]
這是我試圖用貓鼬奔跑而沒有運氣的東西:
db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar}}},{$set:{"surveyResults.$.result" : newResultVar}});
我使用了變量,我知道它們具有正確的值以匹配我需要更新的位置。 有什么我想念的嗎?
到目前為止,我猜想將miss match鍵入為element match。 在您的數據示例中, questionNumber是字符串,因此,如果與整數類型questionNumVar進行比較,則它不起作用。 所以比較需要將其轉換為字符串(如果為整數),否則應該可以工作。
可以嘗試:
db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar.toString()}}},{$set:{"surveyResults.$.result" : newResultVar}}).exec();
那么它應該工作了。
我在整個條件和更新前后添加了幾個級別的控制台日志記錄,並看到所有路徑都在傳播。 然后我添加了這一行:
mongoose.set('debug', true);
這將記錄與數據庫的所有貓鼬交互。 我看到我粘貼的命令甚至沒有運行! 原來我不小心放棄了
.exec()
最后,因此它沒有執行命令。 經過一個小時的檢查並仔細檢查了我的語法,變量類型,就是這樣。
在此過程中,我確實了解了更多有關$運算符的信息,如果您不知道它在mongoose / mongodb中的位置,則應仔細閱讀該內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.