我有一個這樣的 mongodb People 檔案:
[
{
_id: "1234567890",
name: "El Wood",
jobs: [
{
_id: "job1",
title: "teacher"
},
{
_id: "job2",
title: "programmer"
}
]
},
...
]
我想將(更新一個)job1 職位從教師更新為講師。
我使用快遞和貓鼬。
我的第一種方法是:
await People.updateOne({ "jobs._id": "job1" }, { $set: { "jobs.$.title": "lecturer" } });
上面的代碼是有效的。
我的第二種方法是先findOne(),然后是set(),然后是save():
const peopleToUpdate = await People.findOne({ "jobs._id": "job1" }) //
peopleToUpdate.set({ "jobs.$.title": "lecturer" })
peopleToUpdate.save()
但是第二種方法不起作用,job1的標題沒有改變。
如何使用第二種方法更新job1標題?
uj5u.com熱心網友回復:
發生這種情況是因為您使用的是異步。為了能夠使用第二種方法,您需要使用 Promise
const peopleToUpdate = await People.findOne({ 'jobs._id': 'job1' })
.then(function (doc) {
doc.title = 'lecturer';
return doc.save();
})
.then(console.log)
.catch(function (err) {
handleError(err);
});
請閱讀這些檔案作為參考
https://mongoosejs.com/docs/async-await.html#basic-use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424015.html
上一篇:如何從貓鼬的物件陣列中洗掉物件
