2015-06-26 22 views
1

我不理解Mongoose模式中字段uniquerequired的用途。在unique的情況下,您似乎必須編寫自己的方法來查詢MongoDB以查看該值是否已經存在。我想用'required'Mongoose只需要檢查該值是否在Mongoose模型的構造函數中傳遞。但具有獨特性,我不明白其目的。Mongoose中'isUnique'字段的用途

userSchema = mongoose.Schema({ 

     username: { 
      type: String, 
      unique: true, 
      required: true, 
      validate: [validation.usernameValidator, 'not a valid username'] 
     }, 
     ... 

,以驗證用戶名,我要創造我自己的函數= validation.usernameValidator檢查MongoDB中,看看如果用戶名已經存在。那麼isUnique有什麼意義?

+0

是的,我做到了! 'unique'是正確的,我所指的是 – Olegzandr

回答

2

unique將在屬性上創建一個MongoDB "unique" index,從而阻止具有相同屬性值的文檔在同一個集合中存在。

但是,由於它是由數據庫執行的,因此它的唯一方法是保存文檔並捕獲MongoDB將返回的重複鍵錯誤。

您可以檢查這個錯誤,像這樣:

if (err && err.code === 11000) { ...duplicate... } 
+0

ahh,我明白了,所以你仍然需要查詢MongoDB以查看用戶名是否被採用,但是MongoDB將在索引中查找而不是在文檔/集合中。本來我想通過使用這個獨特的屬性,Mongoose/MongoDB會照顧上述情況。但是從你說的話看來,我仍然需要向Mongo發送查詢。 IMO應該在哪裏烤? – Olegzandr

+1

@Olegzandr文檔指出'unique'在數據庫中創建一個唯一的索引,僅此而已。雖然我同意可以預期它是Mongoose(而不是MongoDB)將處理唯一性違規(儘管這隻能由Mongoose執行您現在必須手動執行的查詢) – robertklep

相關問題