2016-10-18 3 views
0

mongooseオブジェクト用のカスタムベイルダーターを作成しようとしています。考えられるのは、nameフィールドは、異なるコレクション内の既存のオブジェクトの名前値でなければならないということです。私はそうのようにこれをやっている:mongoose:データベースに既に入っているフィールドを検索するスキーマの一部を無効にしました

var seshSchema = new Schema(
    { 
     student: 
      { 
       type: String, 
       validate: [ 
       function(input) 
       { 

        studentColl.find({name: input},function(err, result){ 
         if(err) 
         { 
          throw err; 
         } 

         return result.length > 0; //how do I make this get returned by the function in vaildate's array? 

        }); 


       }, "nope"] 
      }, 
     tutor: {type: String}, 
     blockTimes: [blockTime], 
     record : [pastSession] 
    } 
); 

は私がやろうとしていることは別のコレクション(studentColl)で一定の基準が存在するか否かに基づいて、この作品を検証しています。これは可能ですか?そこMongoose Validation

彼らは非同期バリhereの使用法を説明します。

答えて

0

は、たぶん、これはあなたが探しているものです。

var seshSchema = new Schema({ 
    student: { 
     type: String, 
     validate: { 
      validator: function(v, cb) { 
       setTimeout(function() { 
        studentColl.find({ name: v }, function(err, result) { 
         if (err) { 
          cb(false); 
         } else { 
          cb(result.length > 0); 
         } 
        }); 
       }, 1); 
      } 
     } 
    }, 
    ... 
}); 
+0

@Schulace:

では、このマニュアルによると、あなたのコードは次のように探している必要があり、この答えはあなたを助けていますか? – mrunde

+0

私はこれをやってみましたが、最初の関数ではなく、findに渡された関数に戻ります。基本的には、この非同期メソッドを同期して実行する必要があります。 – Schulace

+0

私は現在、非同期バリデータを使用しているanwerを更新しました。多分、これはあなたが探しているものですか? – mrunde

関連する問題