2017-12-16 12 views
0

gradeというスキーマプロパティを別のモデルのidに参照しようとしています。しかし、私はnullとしておきたい場合があります。私はnullとしてデフォルトのままにしようとした試みたが、私は次のエラーを取得する:デフォルトのヌルのMongooseスキーマ参照値

ValidationError: User validation failed: grade: Cast to Array failed for value "" at path "grade" 

次は私のコードです:

import * as mongoose from 'mongoose'; 
const userSchema = new mongoose.Schema({ 
    username: String, 
    email: { type: String, unique: true, lowercase: true, trim: true }, 
    password: String, 
    school: { type: String, default: null }, 
    mobile: Number, 
    grade: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Grade', default: null }], 
    role: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Role' }], 
    company: { type: String, default: null }, 
    designation: { type: String, default: null }, 
    active: { type: Number, default: 2 }, 
    url: { type: String, default: null }, 
    admin: { type: Number, default: 0}, 
    created: { type: Date, default: Date.now }, 
    last_active: { type: Date, default: Date.now } 
}); 
const User = mongoose.model('User', userSchema); 
export default User; 

は、私が参照するもののnullとしてデフォルト値を保つことができる方法はありますそれ?

答えて

1

MongoDBまたはNoSQLデータベースでは、Schemalessアーキテクチャに基づいているため、デフォルト値をNULLにする必要はありませんが、リレーショナルデータベースではこれを行うことができます。フィールドの値を持たない限り、この列はこの列には存在しないはずです。あなたのスキーマの2行について、それらの例以下

チェック:あなたが最初の行は全く学校を持っていないに気づく

{username: "jack", email: "[email protected]", password: "123"} 
{username: "msoliman", email: "[email protected]", password: "123", school: "AB"} 

が、これは正確にあなたがNULLなどのリレーショナルデータベースの学校に保存すると同じです。

私はこれが私の言いたいことを理解するのに役立ちます。役に立った場合は、私の回答を評価するのを忘れないでください。

+0

私は理解してどういう意味ですか。ポインタありがとう!私はそれを解決することができましたが、UIからデータを渡さないようにして、nullとして保存されました。ありがとう! – JackSlayer94

0

NoSQLは値が利用可能な場合に定義されます。そうでない場合はスキーマに格納されます。あなたが持つかもしれないあなたの鍵を定義するか、他のあなたの上記のスキーマに必要な役割をとっているような値がそれらを取るしていないあなたは
デフォルトとしてそれを取ることができるのであれば:「」、

school: { type: String, default: '' } 
関連する問題