gpt4 book ai didi

javascript - Mongoose 不保存对文档的更改

转载 作者:行者123 更新时间:2023-12-01 01:33:02 25 4
gpt4 key购买 nike

如果这可能是一个重复的问题,我很抱歉,但我很难理解 Mongoose。
我正在开发一个实现 Mongoose 和 MongoDB 的 Node.js 项目。我想要完成的是通过来自特定端点的调用来修改和保存一些用户的数据。
Mongoose 架构看起来像这样

  var UserSchema = new Schema({
isAdmin: {type: Boolean, default: false},
name: String,
surname: String,
nickname: { type: String },
email: { type: String, lowercase: true, required: true, trim: true, unique: true, dropDubs: true },
password: { type: String, required: true },
salt: { type: String },
verified: { type: Boolean, default: false },
bio: {
type: { type: String, enum: [0,1] }, // 0='Appassionato', 1='Giocatore'
birthday: String,
height: Number,
number: Number,
role: { type: String, enum: [0,1,2,3] }, // 0='Playmaker', 1='Ala', 2='Guardia', 3='Centro'
team: String,
city: String,
aboutMe: String,
},
newsletter: {type: Boolean, default: false},
lastCheckin: {type: mongoose.Schema.Types.ObjectId, ref: 'Checkin'},
follows: [{type: mongoose.Schema.Types.ObjectId, ref: 'Structure'}],
score: { type: Number, default: 0 },
profilePicture: String,
lastLogin: {type: Date},
facebook: {
id: String,
accessToken: String,
profileImage : String
}
}, {
collection: 'users',
retainKeyOrder: true,
timestamps: true,
}).plugin(mongoosePaginate);

以下是询问端点时的代码

exports.updateUser = (req,res)  => {
var userId = req.params.userId;
var updates = req.body;

User.findOneAndUpdate({_id: userId}, {$set: updates}, (err, saved) => {
if (!err) {
console.log("Ritorno questo: " + saved);
return res.status(202).json(saved);
} else {
return res.status(500).json(saved);
}
});

};

据我了解,Mongoose暴露的findOneAndUpdate方法应该找到我要找的文档,然后修改并保存。但这并没有发生。
我通过 PostMan 发送此 JSON

{"bio.aboutMe":"Hello this is just a brief description about me"}

但是 PostMan 正在使用未修改的对象进行响应。我在这里缺少什么?

最佳答案

您需要做的是添加 {new:true},它会返回更新后的文档。在 documentation :

If we do need the document returned in our application there is another, often better, option:

> Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, { new: true },
> function (err, tank) { if (err) return handleError(err);
> res.send(tank); });

这是我不太喜欢的事情,因为如果我们不想让文档 → 更新,还有另一种选择

所以你需要做的是:

User.findOneAndUpdate({_id: userId}, {$set: updates}, {new:true}.....

关于javascript - Mongoose 不保存对文档的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53084345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com