Mongoose数组对象maxlength验证不起作用

时间:2016-10-15 15:00:18

标签: node.js mongodb mongoose mongoose-schema

我有下面的架构允许我为现有应用创建徽章为“1234567”的用户。我希望收到maxlength validation的验证错误b / c。

我的架构有问题吗?

module.exports = function(db) {
    var mongoose = require('mongoose');

    var appSchema = mongoose.Schema({
        name: {
          type: String,
          required: true,
          unique: true,
        },
        settings: mongoose.Schema.Types.Mixed,
        user: [{
          badge: {
            type: String,
            minlength: 5,
            maxlength: 5
          }
        }]
    });

    // Export the schema for the app to use
    return db.model('apps', appSchema);
}

我正在尝试使用

apps.findByIdAndUpdate(req.params.id, {$push: {user: req.body.user}}, {runValidators: true},callback()); 

将新用户记录添加到应用程序文档中的数组中。

2 个答案:

答案 0 :(得分:1)

验证者只会work on updates for $set and $unset operations,所以我相信在这种情况下你必须在更新之前手动验证。

答案 1 :(得分:0)

从文档mongoose requires an Schema to validate nested objects开始。

所以你的架构应该这样定义。

您可以尝试使用以下定义吗?

var userSchema = mongoose.Schema({
    badge: {
      type: String,
      minlength: 5,
      maxlength: 5
    }
});

var appSchema = mongoose.Schema({
    name: {
      type: String,
      required: true,
      unique: true,
    },
    settings: mongoose.Schema.Types.Mixed,
    user: [userSchema]
});