Javascript Mongo数据库集不工作

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}],

我正在尝试使用mongodb和mongoose更新数据库中的用户对象。以下是模式:

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