无法将字段设置为Meteor Collection中的唯一字段

时间:2016-05-11 09:14:51

标签: meteor meteor-collection2 simple-schema

我正在尝试使用简单架构将一个字段设置为唯一。但无论我做什么,它都无法正常工作。以下是我如何设置它:

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

我甚至试图重置流星。如果我添加重复值,它将不会添加记录,但在验证时甚至不会给出任何错误。

1 个答案:

答案 0 :(得分:0)

简单模式中的唯一字段没有内置验证。您必须使用official docs中提到的自定义简单模式验证。

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"
          }]);
        }
      });
    }
  }
}

这将使用验证上下文调用自定义验证。

注意:这将是异步的,因为它必须在服务器端查询数据库以检查该字段是否包含唯一数据项。