2016-12-17 5 views
0

文書が別の文書と同じ配列を持つことができないデータベーススキーマを作成したい。だから、私はスキーマconversationsを持っていると言う:私は、同じ参加者を持つ2人の会話を作成する場合は、2番目の1が失敗するようにMongoose - 文書が同じ配列を持つことを許可しない

var ConversationSchema = new Schema({ 
    name: String, 
    participants: { 
     type: [{ 
      type: Schema.Types.ObjectId, 
      ref: 'User' 
     }] 
    } 
}); 

は今、どのように私はこれを検証することができますが、第三はないのだろうか?

var conversation1 = new Conversation({ 
    name: "Hello", 
    participants: ['12345', '09876'] 
}); 

var conversation2 = new Conversation({ 
    name: "World", 
    participants: ['12345', '09876'] 
}); 

var conversation3 = new Conversation({ 
    name: "Group chat", 
    participants: ['12345', '09876', '13579'] 
}); 

conversation1.save(); // Valid 
conversation2.save(); // Invalid - conversation already exists 
conversation3.save(); // Valid 
+1

これはスキーマの検証ではないビジネスロジックのようです –

答えて

1

私はあなたのデータを保存する前にいくつかのカスタムマングース検証を使用することができると思います。 しかし、これは実際には既存の配列と新しい配列とを比較するデータベースクエリを作成する必要があるため、Kevin氏のコメントで述べたように、これは実際にはスキーマの問題ではありません。

function checkArray(arr) { 
// here make a call to the db to compare existing array with arr 
} 

var ConversationSchema = new Schema({ 
    name: String, 
    participants: { 
     type: [{ 
      type: Schema.Types.ObjectId, 
      ref: 'User', 
      validate: checkArray 
     }] 
    } 
}); 

今のところは良いアイデア:この(テストしていない)のような
何か。

+0

それはちょっとうんざりですが、私はこれを想定してこのようにすることができます。ありがとう –

関連する問題