我花了整个早上的时间在谷歌上搜索这个问题,并尝试了各种修复方法,但我无法弄清楚。
当我尝试运行此命令时,我不断收到错误“TypeError: req.user.findOneAndUpdate is not a function”:
req.user.findOneAndUpdate({_id: req.user._id}, { $addToSet: { flashcards : { $each: cards }}}, {upsert : true}, function(err, doc) {
if(err) return console.log(err);
res.send(doc);
});
我尝试显式地将 req.user 转换为 User 模型(例如 var NewUser = new User(req.body),尝试简化查询等,但似乎没有任何效果。
编辑:使用模型声明
const User = require('../models/user');
var NewUser = new User(req.user);
NewUser.findOneAndUpdate({_id: req.user._id}, { $addToSet: { flashcards : { $each: cards }}}, {upsert : true}, function(err, doc) {
if(err) { return console.log(err); }
else { return res.send(doc);}
});
用户模型架构
const mongoose = require('mongoose'),
Schema = mongoose.Schema,
FlashcardSchema = require('./flashcardSchema'),
bcrypt = require('bcrypt-nodejs');
var UserSchema = new Schema({
username: {
type: String,
required: false
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String
},
created_on: {
type: Date,
default: Date.now
},
points: Number,
flashcards: [FlashcardSchema],
courses: [{type: Schema.Types.ObjectId, ref: 'Course'}]
});
UserSchema.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
UserSchema.methods.validPassword = function(password) {
return bcrypt.compareSync(password, this.password);
};
module.exports = UserSchema;
还有模型
const mongoose = require('mongoose'),
Schema = mongoose.Schema,
UserSchema = require('../schemas/userSchema');
module.exports = mongoose.model('User', UserSchema);
最佳答案
解决方案是在模型上运行函数,而不是在模型的实例上运行。所以代替:
var NewUser = new User(req.user);
NewUser.findOneAndUpdate...
做:
User.findOneAndUpdate...
关于javascript - findOneAndUpdate 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995522/