Mongoose保存方法不会更新我的文档

时间:2017-10-23 17:55:17

标签: node.js mongoose mongoose-schema

更改值时,我的模型似乎没有更新。我使用了markModified方法,但它似乎不起作用。打开调试模式后(mongoose.set('debug', true))。我开始分析查询。我注意到您指定_id的顺序至关重要。用户架构有一个嵌入的_id(我存储ObjectID和我的应用程序所需的自定义值)。

这是Mongoose正在生成但不起作用的查询:

db.getCollection('user')
  .update(
    { _id: { special_id: 0, user_id: ObjectId("59e8a02ba9986866bad4aa50") }},
    { '$set': { password: 'test' }}
  );

我改变了_id的顺序,然后它起作用了:

db.getCollection('user')
  .update(
    { _id: { user_id: ObjectId('59e8a02ba9986866bad4aa50'), special_id: 0 }},
    { '$set': { password: 'test' }}
  );

Mongoose架构如下所示(仅显示_id):

const User = new Schema({
  _id: {
    user_id: {
      type: Schema.Types.ObjectId,
      required: true,
    },
    xms_id: {
      type: Number,
      required: true,
    },      
  },
});

这是我正在使用的Mongoose查询:

User.findOne({ reset_password_token: req.params.token })
  .then((user) => {
    if (!doc) {
      return res.redirect('/');
    }
    user.password = req.body.password;
    user.markModified('password');

    user.save((err, updatedUser, numAffected) => {
      if (err) {
        return next(err);
      }
      console.log('updateduser', updatedUser); // Record with new password
      console.log('numaffacted', numAffected); // 0 records are affected
    });
  })
  .catch(err => next(err));

有谁知道如何解决这个问题?当我想使用User.save()时,我似乎无法改变顺序。

0 个答案:

没有答案