2016-05-15 57 views
1

我有一個電子郵件字段,我想要唯一的電子郵件。我也希望有一個空白領域的可能性。如果電子郵件爲空/空/不存在,我不希望它檢查唯一性。Mongoose/keystonejs:唯一的字段,除非字段爲空

這裏是梯形定義我的列表模式:

Book.add({ 
    number: { type: Types.Number }, 
    email: { type: Types.Email, initial: true, index: true, unique: true }, 
    token: { type: Types.Text }, 
    title: { type: Types.Text, initial: true }, 
    author: { type: Types.Text, initial: true }, 
    name: { type: Types.Text, initial: true }, 
    dedication: { type: Types.Textarea, initial: true }, 
    image: { type: Types.CloudinaryImage } 
}); 

梯形公開貓鼬的模式,這樣我就可以訪問。我可以添加一個自定義的驗證,除非字段爲空,否則我會希望得到更優雅的東西。

我已經有足夠的數據,我不知道這是否使索引的東西更復雜。

回答

1

我假設你問這個問題,unique: true沒有做你想要的東西,當電子郵件字段留空。

您可以嘗試設置sparse: true,如here所示,如果keystone直接將該值直接傳遞給模式,您應該沒問題。

如果沒有,最好的方法,正如您所提到的,可能只是爲您添加一個簡單的預保存鉤子,因爲目前在keystone中沒有選項允許您執行此操作。

希望有幫助(並讓我知道如果sparse: true工程)!

+0

我確實嘗試過使用稀疏:true,但那對我沒有用。 – Tom

+0

可能值得在空數據庫中首先嚐試它,只是爲了檢查它不是你已經有數據的事實。如果沒有,它可能必須是一個預存儲鉤子。 –