2017-04-27 6 views
6

私はノードjsアプリケーションでmongoose jsと一緒にmongodbを使用しています。私は、 "TeamSchema"(別のマングース文書スキーマ)をサブ文書として使用している "CompanySchema"というmongoose文書スキーマを作成しました。この "TeamSchema"の内部には、 "EmployeeSchema"(別のマングース文書)をサブ文書として使用している従業員として定義された配列があります。だから私の質問は、 "CompanySchema"というドキュメントの要件ステータスのデフォルト値を "unmet"に設定しようとしているときです。あなたはここで間違っていることを私に説明することができますか?mongoose sub docのデフォルト列挙値を設定するには?

export var EmployeeSchema = new Schema({ 
id: { 
    type: String 
}, 
requirement: { 
    type: { 
    status: { 
     type: String, 
     enum: ['met' 'unmet'], 
     default : 'unmet' 
    } 
    }, 
    default: null 
}, 
}); 

export var TeamSchema = mongoose.model<TeamModel>("Team", new mongoose.Schema({ 
id: { 
    type: String, 
}, 
name: { 
    type: String 
}, 
employees: [EmployeeSchema] 
})); 

export var CompanySchema = mongoose.model<CompanyModel>("Company", new mongoose.Schema({ 
id: { 
    type: String 
}, 
team: TeamSchema.schema, 
})); 
+0

要件属性には1つのフィールドしかありません。私はなぜ別のフィールド 'ステータス'を定義し、そのための列挙型を定義したのだろうと思っています。 – notionquest

+0

近い将来、要件属性内にいくつかの他の属性を追加したいと考えています。今のところ属性ステータスは列挙型です。この属性のデフォルト値は "unmet"で、実行時に "met"に更新されます。 –

答えて

1

あなたのスキーマには2つの問題があると思います。

まず、マングース予約済みキーワードtypeを使用します。

By default, if you have an object with key 'type' in your schema, mongoose will interpret it as a type declaration.

マングースドキュメント:typeKey

第二に、あなたは、プロパティ名としてtypeキーワードを使用していなかった場合にエラーを与えるべき、nullにデフォルト値を設定します。 exempleためrequirement_typetypeの名前を変更しようとすると、あなたは、このエラーが発生します:コヒーレントである

TypeError: Invalid value for schema path `requirement.default` 

を、それが正確にデフォルト値を設定するためのタイプを必要とするため。

SchemaType#default(val)
Sets a default value for this SchemaType.

マングースドキュメント:SchemaType-default

あなたはデフォルトでnull作りたい、なぜ私は本当に理解していないが、あなたはexemple Mixed typeのために追加することによってそれを行うことができます。

requirement: { 
    type: {}, 
    requirement_type: { 
    status: { 
     type: String, 
     enum: ['met', 'unmet'], 
     default : 'unmet' 
    } 
    }, 
    default: null 
} 
// => { requirement_type: null } 

かデフォルトを削除すると、次のようになります。

requirement: { 
    requirement_type: { 
    status: { 
     type: String, 
     enum: ['met', 'unmet'], 
     default : 'unmet' 
    } 
    } 
} 
// => { requirement_type: { status: 'unmet' } } 

注:列挙値はコンマで区切る必要があります。

関連する問題