Проверка максимальной длины объекта массива Mongoose не работает

У меня есть схема ниже, которая позволяет мне создать пользователя со значком «1234567» для существующего приложения. Я ожидал получить ошибку проверки b/c проверки maxlength.

Что-то не так с моей схемой?

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()); 

чтобы добавить новую запись пользователя в массив в документе приложения.


person Catfish    schedule 15.10.2016    source источник


Ответы (2)


Валидаторы будут только обрабатывать обновления для $set и $ отменить операции, поэтому я считаю, что в этом случае вам придется выполнить проверку вручную перед обновлением.

person andresk    schedule 15.10.2016

Как и в документах, mongoose требуется схема для проверки вложенных объектов.

поэтому ваша схема должна быть определена как таковая.

Не могли бы вы вместо этого попробовать использовать следующее определение?

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]
});
person Felipe Sabino    schedule 15.10.2016
comment
Все еще не работает. Вот как я пытаюсь вставить запись пользователя в существующее приложение: apps.findByIdAndUpdate(req.params.id, {$push: {user: req.body.user}}, {runValidators: true},callback()); - person Catfish; 15.10.2016