如何首先将 Model.updateOne() 转换为 Model.findOne() 然后 Model.set() 然后 Model.save()
How to convert Model.updateOne() to Model.findOne() first then Model.set() then Model.save()
我有一个 mongodb 人物文档 是这样的:
[
{
_id: "1234567890",
name: "El Wood",
jobs: [
{
_id: "job1",
title: "teacher"
},
{
_id: "job2",
title: "programmer"
}
]
},
...
]
我想更新(更新一个)job1 title 从 teacher 到 lecturer.
我正在使用 express 和 mongoose。
我的第一个方法是:
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 的标题?
发生这种情况是因为您使用的是异步。
要使用第二种方法,您需要使用 promises
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
我有一个 mongodb 人物文档 是这样的:
[
{
_id: "1234567890",
name: "El Wood",
jobs: [
{
_id: "job1",
title: "teacher"
},
{
_id: "job2",
title: "programmer"
}
]
},
...
]
我想更新(更新一个)job1 title 从 teacher 到 lecturer.
我正在使用 express 和 mongoose。
我的第一个方法是:
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 的标题?
发生这种情况是因为您使用的是异步。 要使用第二种方法,您需要使用 promises
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