簡體   English   中英

更新MongoDB數組中的文檔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM