我正尝试使用其username
属性在集合中找到一个项目,然后更新该项目的picture_url
属性。
我正在使用猫鼬,并尝试在异步函数中使用findOneAndUpdate
来做到这一点:
const username = 'myusername'
const newPictureLink = 'picture.jpg'
const updatedUser = await UserModel.findOneAndUpdate(
{ username },
{ $set: { picture_url: newPictureLink } },
{ new: true }
)
console.log(updatedUser)
但是记录的值是现有项,不会更新。这不是日志记录问题,因为该项目在数据库中也没有更改。
我在做什么错了?
答案 0 :(得分:0)
您没有执行查询。 尝试
const updatedUser = await UserModel.findOneAndUpdate(
{ username },
{ $set: { picture_url: newPictureLink } },
{ new: true }
).exec()
还有一件事,您需要将await调用包装在异步函数中。
答案 1 :(得分:0)
之前:
{ "username": "foo", "picture_url": "xyz.jpg"}
查询:
let username = "foo";
async function findUpdate(){
const updatedUser = await User.findOneAndUpdate(
{ username },
{ picture_url : "kkk.jpg" },
{new: true});
console.log("updatedUser: ", updatedUser);
}
findUpdate();
之后:
updatedUser: { _id: 5bd89f55f255307d51f32572,
username: 'foo',
picture_url: 'kkk.jpg'}
架构:
let UserSchema = new Schema({
username: {
type: String
},
picture_url: {
type: String
}
});
要考虑的要点:
picture_url
键。您可能在拼写错误
模式或查询中。async
函数以使用await
。username
键。您可能在架构或查询中出现拼写错误。.exec()
函数,否则您将甚至连
如果未调用函数,则updatedUser
下的旧数据。没关系
写。希望这可能对您有帮助!
答案 2 :(得分:0)
您有2个问题:
首先使用没有异步的await函数,根据DOCS,没有异步就不能使用await:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
第二:从findOneAndUpdate返回的输出将不会保证,将是已更新的数据,并且等待只能处理保证。