【问题标题】:Mongo DB set not workingMongodb设置不工作
【发布时间】:2018-10-03 14:48:51
【问题描述】:

我正在尝试使用 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 中输出用户时,它仍然未更新。

【问题讨论】:

标签: javascript mongodb mongoose


【解决方案1】:

数据库操作是异步的 - 你需要提供一个回调函数或等待一个 Promise 被解析,以便确定操作的顺序。

在您的情况下,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
  });

【讨论】:

  • 这有效,但只会更新 billingAddress 的值...我现在正在调试 @Tsvetan-Ganev
【解决方案2】:

试试这个: 使用“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
    }
    )

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 2012-11-07
    • 2017-09-28
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多