2017-09-15 84 views
1

期間我使用流星1.5MongoDB的3.2條件抑制了SimpleSchema現場驗證批量插入

我用下面簡單的模式插入到客戶端集合。

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的自動窗體6.0簡單QuickForm它的偉大工程。

問題場景:

我執行批量插入,因爲我有計3000客戶端我解析「有效」 Excel工作表,然後使用循環我嘗試插入數據,但是當正則表達式不匹配操作失敗對於手機號碼

問:

如何抑制SimpleSchema現場驗證時,我上已經有一個SimpleSchema連接到它的集合進行「批量插入」?另外我希望客戶在批量插入期間放置任何移動號碼,因爲用戶可能不知道正則表達式。

回答

1

根據documentation請讓你的批量插入過程中抑制驗證:

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

補充:

如果你不想抑制整個文件的驗證,就可以把第二模式添加到相同的集合(刪除特定字段的驗證)並在批量插入期間切換到它:

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

Documentation使用多個模式。

+0

你甚至休息/睡覺/離開,我發現你非常積極地參加SO LOL。開玩笑!。順便讓我測試答案。但似乎答案將適用。 –

+0

同樣可以說你:)順便說一句,我已經更新了我的答案,以添加另一個可能的解決方案。 – Styx

+0

它是否適用於'collection2-core 2.0.1'?我正在使用最新的'Autoform 6.2.0'。併爲其構建失敗 –