我正在學習貓鼬,我在檔案中找不到,也無法在本網站的其他問題中找到,為什么最終updateMany()需要.then()執行。
例如,這是我嘗試運行的代碼,旨在更改 1992 年和 2019 年制作的電影的評級。
Movie.updateMany({year: {$in: [1992,2019]}}, {rating: 'M'}).then(data => console.log(data));
這些是有問題的電影:
{ "_id" : ObjectId("6282e0d37a9a5a4851d465b1"), "title" : "Elton Pan", "year" : 2013, "score" : 10, "rating" : "M", "__v" : 0 }
{ "_id" : ObjectId("6282e0d37a9a5a4851d465b2"), "title" : "Pon Porom", "year" : 2019, "score" : 0, "rating" : "M", "__v" : 0 }
{ "_id" : ObjectId("6282e0d37a9a5a4851d465b3"), "title" : "The Night", "year" : 1992, "score" : 10, "rating" : "R", "__v" : 0 }
如果我最終嘗試不運行代碼.then,則沒有任何變化。
我也看到有人.then最終使用這種方法,這讓我懷疑我是否因為我使用的 Mongoose 版本而不能這樣使用它。
澄清一下,我正在通過 Mongo shell 檢查結果,而不是試圖在代碼中檢索結果。
在此先感謝,對于菜鳥問題??感到抱歉:)
uj5u.com熱心網友回復:
updateMany沒有它就不起作用,.then因為它回傳一個Promise。實際上,它會更新資料,但是要讓您擁有更新的資料,您需要等待它,因為 Promise 是一個稍后開始和結束的任務。.then讓你說,我想知道我要求的任務什么時候完成。
要了解 JavaScript 中的 Promise,您可以觀看此Youtube 視頻,或使用上面的鏈接在 MDN 上閱讀有關它的內容。它是 JavaScript 中的一個關鍵概念。Mongoose 的檔案沒有討論他們使用的.then原因,因為他們假設此時您對此有所了解。
uj5u.com熱心網友回復:
它不需要.then()執行。當你這樣做時它執行得很好:
Movie.updateMany({year: {$in: [1992,2019]}}, {rating: 'M'})
您只是無法訪問結果,因為它是異步操作。該函式回傳一個承諾。.then()等待承諾解決,然后將結果作為回呼的第一個引數提供給您.then()。
我建議使用async...await語法。有一堆.then()承諾鏈接廢話是不好的,尤其是現在。
// wrapped it in an automatically invoked async function
(async () => {
const data = await Movie.updateMany({year: {$in: [1992,2019]}}, {rating: 'M'})
console.log(data)
})()
uj5u.com熱心網友回復:
我想我可能已經找到了對這個.then問題的解釋。參考我正在做的(Udemy)課程的老師 Zarko 的話:
默認情況下,mongoose 查詢不應該回傳一個真正的 promise,而是一個可呼叫的查詢物件。基本上,mongoose 在處理異步查詢時提供對回呼、promise 和 async/await 語法的支持。mongoose 查詢本身將回傳一個 mongoose 'query' 物件,該物件有自己的 .then (所以它就像是常規 promise 的 mongoose 自定義包裝器),當我們向其中添加 .then 時,我們會觸發該查詢的執行。您可以在此處查看 mongoose 檔案:https ://mongoosejs.com/docs/promises.html#queries-are-not-promises
你可以查看這篇文章:https ://masteringjs.io/tutorials/mongoose/promise
因此,如檔案中所述,我們還可以在查詢之后鏈接 .exec() 方法呼叫以獲得完整的承諾- Mongoose - exec 函式是做什么的?
因此,基本上,.thenor.exec是觸發該查詢執行所必需的(不使用時async...await)。至少我從老師的回答中是這樣理解的。
這是我的第一篇文章,我不確定是否應該將其發布為答案或編輯我自己的問題以包含此解釋,我們將不勝感激。謝謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/478316.html
標籤:javascript mongodb 猫鼬
