Mongodb findOneAndUpdate不';t更新对象-猫鼬
我正在尝试使用集合中的Mongodb findOneAndUpdate不';t更新对象-猫鼬,mongodb,mongoose,Mongodb,Mongoose,我正在尝试使用集合中的username属性查找该项,然后更新该项的picture\u url属性 我正在使用Mongoose,并尝试在异步函数中使用findOneAndUpdate来实现这一点: const username = 'myusername' const newPictureLink = 'picture.jpg' const updatedUser = await UserModel.findOneAndUpdate( { username }, { $set: { pic
username
属性查找该项,然后更新该项的picture\u url
属性
我正在使用Mongoose,并尝试在异步函数中使用findOneAndUpdate
来实现这一点:
const username = 'myusername'
const newPictureLink = 'picture.jpg'
const updatedUser = await UserModel.findOneAndUpdate(
{ username },
{ $set: { picture_url: newPictureLink } },
{ new: true }
)
console.log(updatedUser)
但记录的值是现有项,不会更新。这不是日志记录问题,因为该项在数据库中也没有更改
我做错了什么?您没有执行查询。 试一试
还有一件事,您需要在异步函数中包装wait调用。之前:
{ "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
}
});
查询:
{ "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
}
});
之后:
{ "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
}
});
模式:
{ "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
}
});
需要考虑的要点:
{ "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\u url
- 编写一个
函数来使用async
wait
- 仔细检查
键。架构或查询中可能存在拼写错误用户名
- 无需编写
函数,否则您将永远无法使用该函数 未调用函数时,.exec()
下的旧数据。虽然还可以 写作updateUser
首先在没有异步的情况下使用wait函数,根据您不能在没有异步的情况下使用wait的文档:
第二:从findOneAndUpdate返回的输出将不会承诺,将是更新的数据,而Wait只能处理承诺。之后会得到什么我已经在使用异步函数了。你所建议的改变似乎没有什么不同,我正在尝试。您是否故意删除了
$set
?你没提。关于exec()
,我刚从文档中读到:“如果您需要一个完整的承诺,请使用.exec()函数”。既然我正在使用异步/等待,那么我不需要一个真正的承诺吗?FordNoand更新以这样的方式设计,它考虑FiLAST参数作为查询,第二个更新。因此,您不需要编写$set,如果使用$set,也可以。您正在使用async/await,因此我认为您不需要使用任何承诺。我输入的代码已经是异步函数的一部分,我应该更清楚地说明这一点。您对解决第二个问题有什么建议?是否用.exec()
预先结束?