在批量插入期间有条件地禁止SimpleSchema的字段验证

时间:2017-09-15 11:01:08

标签: javascript meteor ecmascript-6 simple-schema

我正在使用 Meteor 1.5 MongoDB 3.2

我正在使用Simple Schema下面插入Clients Collection。

import { Mongo } from 'meteor/mongo';
import SimpleSchema from 'simpl-schema';
SimpleSchema.extendOptions(['autoform']);

export const Clients = new Mongo.Collection('Clients');

ClientsSchema = new SimpleSchema({
  "gstNo": {
    type: String,
    label: "GST No.",
    regEx: /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/,
    optional: true,
  },
  "mobile": {
    type: String,
    label: "Mobile 1",
    regEx: /^[789]\d{9}$/,
  }
});

Clients.attachSchema( ClientsSchema );

使用Aldeed' AutoForm 6.0 的简单QuickForm,效果很好。

问题情景:

我执行批量插入,因为我有数量为3000的客户端。我解析"有效" excel表然后使用循环我尝试插入数据,但当正则表达式与移动号码不匹配时操作失败。

问题:

当我执行"批量插入"时,如何抑制SimpleSchema字段验证?对于已经附加了SimpleSchema的集合?此外,我希望客户在批量插入期间放置任何Mobile no,因为用户可能不知道正则表达式。

1 个答案:

答案 0 :(得分:1)

根据documentation,您只需在批量插入期间禁止验证:

Clients.insert(doc, { validate: false });

<强>加了:

如果您不想取消整个文档验证,可以将第二个架构附加到同一个集合(删除特定字段的验证)并在批量插入期间切换到它:

Clients.attachSchema(anotherSchema, { selector: { type: 'trustedMobile' } });
...
Clients.insert(doc, { selector: { type: 'trustedMobile' } });

Documentation用于使用多个模式。