mongoose nodejs“未知修饰符:$ pushAll”

时间:2018-02-07 09:20:00

标签: node.js mongodb mongoose

你好我正在上这门课,但我似乎无法解决我的问题,我明白了 { "name": "MongoError", "message": "Unknown modifier: $pushAll", "driver": true, "index": 0, "code": 9, "errmsg": "Unknown modifier: $pushAll" } 当我尝试创建一个新用户时。我查了一下它说得太多了 { usePushEach: true }); 我做的mongoose的架构设置,但它仍然是错误,我似乎无法修复它这里是代码

const mongoose = require("mongoose");
const validator = require("validator");
const jwt = require("jsonwebtoken");

var UserSchema = new mongoose.Schema({

  email: {
    require: true,
    type: String,
    minlength: 1,
    trim: true,
    unique: true,
    validate: {
      validator: validator.isEmail,
      message: `{VALUE} is not a valid email`
    }
  },
  password: {
    type: String,
    require: true,
    minlength: 6
  },
  tokens: [{
    access: {type: String, require: true},
    token: {type: String, require: true}
  }]
},{
  usePushEach: true
});

UserSchema.methods.generateAuthToken = function() {
  var user = this;
  var access = "auth";
  var token = jwt.sign({_id: user._id.toHexString(), access}, "abc123").toString();
  // user = user.concat({access, token})
  // console.log(user)
  user.tokens.push({access, token})

  return user.save().then(() => {
      return token
  })
};

var User = mongoose.model("User",  UserSchema);


module.exports = {User};

2 个答案:

答案 0 :(得分:5)

从v2.4开始,我们已弃用mongodb official documentation $pushAll

在最新的mongodb版本中,(3.6) $pushAll不再存在。

  

使用$ push运算符代替$。

如果您想强制使用$pushAll,请在this thread中提供解决方案

enter image description here

问题的真正答案是:

  

@SkylarLopez嗯......我会看看你的mongoDb版本   猫鼬。看看它们是否匹配,也许你有一个不合适的猫鼬   在其中使用$ pushAll的版本.save方法

答案 1 :(得分:0)

而不是

 tokens: [{
    access: {type: String, require: true},
    token: {type: String, require: true}
  }]

试试这个

 tokens: {type: Array, require: true}