javascript - findOneAndUpdate 不是函数

标签 javascript node.js mongodb express mongoose

我花了整个早上的时间在谷歌上搜索这个问题,并尝试了各种修复方法,但我无法弄清楚。

当我尝试运行此命令时,我不断收到错误“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/

相关文章:

javascript - 如何在对象[object HTMLCollection]上插入Mysql数据文本

javascript - 如何正确地增加 mongoDB 中的许多日期?

javascript - Node.js/ express : Prevent AJAX HTML snippet from being loaded directly from URL

javascript - 使用 Node.js 接收嵌套的 JSON 对象

javascript - 创建/保存之前获取记录 `id` |风 sails Js

javascript - 使用外部按钮在 iFrame 中暂停 YouTube 视频

javascript - 通过 ajax 通过一个按钮将单个表单提交给两个操作

javascript - 将日期从字符串转换为日期 Javascript

javascript - process.env.NODE_ENV 是否自动设置为 'production' ?

javascript - 获取 json 数组上的最后一个 id 号 javascript