Невозможно установить уникальное поле в коллекции Meteor.

Я пытаюсь сделать одно поле уникальным, используя простую схему. Но что бы я ни делал, это не работает. Вот как я это настроил:

let schema = new SimpleSchema({
  name: {
    type: String,
    label: 'Committee name',
    max: 200
  },
  shortName: {
    type: String,
    label: 'Short name',
    max: 10,
    index: true,
    sparse: true,
    unique: true,
    autoValue: (com) => {
      if (com.shortName) {
        return com.shortName.toLowerCase();
      }
    }
  },
});

Я даже пытался сбросить метеор. Если я добавлю повторяющееся значение, оно не добавит запись, но даже не выдаст никаких ошибок при проверке.


person THpubs    schedule 11.05.2016    source источник
comment
Вы используете вставку обновления или upsert?   -  person kpie    schedule 11.05.2016
comment
Ага. Чтобы добавить элемент, я использую insert Но перед этим я использую метод проверки, чтобы получить ошибку: Collection.simpleSchema().namedContext('insertForm').validate(values)   -  person THpubs    schedule 11.05.2016


Ответы (1)


В простой схеме нет встроенной проверки уникальных полей. Вы должны использовать пользовательскую простую проверку схемы, как указано в официальные документы.

username: {
  type: String,
  regEx: /^[a-z0-9A-Z_]{3,15}$/,
  unique: true,
  custom() {
    if (Meteor.isClient && this.isSet) {
      Meteor.call("accountsIsUsernameAvailable", this.value, (error, result) => {
        if (!result) {
          this.validationContext.addValidationErrors([{
            name: "username",
            type: "notUnique"
          }]);
        }
      });
    }
  }
}

Это даст вызов пользовательской проверки с использованием контекста проверки.

Примечание. Это будет асинхронно, так как необходимо запросить базу данных на стороне сервера, чтобы проверить, содержит ли поле уникальный элемент данных или нет.

person Faisal Hasnain    schedule 09.10.2017