Javascript Mongo数据库集不工作
我正在尝试使用mongodb和mongoose更新数据库中的用户对象。以下是模式:Javascript Mongo数据库集不工作,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在尝试使用mongodb和mongoose更新数据库中的用户对象。以下是模式: const userSchema = new schema({ username: String, password: String, firstName: String, lastName: String, age: Number, ticketsPurchased: [{name: String, date: Date, link: String}],
const userSchema = new schema({
username: String,
password: String,
firstName: String,
lastName: String,
age: Number,
ticketsPurchased: [{name: String, date: Date, link: String}],
admin: Boolean,
billingAddress: String,
cityResiding: String,
stateResiding: String,
creditCard: String,
});
下面是我试图更新它的代码:
socket.on("changeUserInfo", function(data){
console.log("CHANING USER INFO");
console.log(data);
User.update({username: data.username}, {
$set: {
firstName: data.firstname,
lastName: data.lastName,
billingAddress: data.billingAddress,
creditCard: data.creditCard,
stateResiding: data.stateResiding
}
});
User.find({username: data.username}, function(err, user){
if (err) console.log(err);
else {
console.log("USER = " + user);
}
});
});
数据是正确的,它输出正确,但当我在user.find中输出user时,它保持未更新状态。数据库操作是异步的-您需要提供回调函数或等待解析承诺,以确定操作顺序 在您的情况下,
find()
方法很可能在update()
操作完成之前返回数据
以下是如何实现所需功能-显示更新的用户:
User.update(
{ username: data.username },
{
$set: {
firstName: data.firstname,
lastName: data.lastName,
billingAddress: data.billingAddress,
creditCard: data.creditCard,
stateResiding: data.stateResiding
}
}
)
.exec()
.then(() => {
// you can now be sure that the update has already completed
User.find({ username: data.username }, function(err, user) {
if (err) console.log(err);
else {
console.log("USER = " + user);
}
});
})
.catch(error => {
// do not forget to handle errors
});
试试这个:
使用“findOneAndUpdate()”的“{new:true}”。这将在进行更改后向您发送数据。希望这有帮助
User.findOneAndUpdate({username:data.username},{$set:
{
firstName: data.firstname,
lastName: data.lastName,
billingAddress: data.billingAddress,
creditCard: data.creditCard,
stateResiding: data.stateResiding
}
}, {new:true},
(err,docs)=>{
//do something here
}
)
它和updateOne一起工作吗?请参阅为meThis工作的这两个都不起作用,但只更新billingAddress的值。。。我正在调试@Tsvetan Ganev