2017-04-27 10 views
6

Düğüm js uygulamasında mongoose js ile birlikte mongodb kullanıyorum. Alt belge olarak “TeamSchema” (başka bir mongoose belge şeması) kullanan “CompanySchema” adlı bir mongoose belge şeması oluşturdum. Bu “TeamSchema” içinde, “EmployeeSchema” (başka bir mongoose belgesi) alt belge olarak kullanan çalışanlar olarak tanımlanan bir dizi vardır. Bu yüzden sorum şu ki “CompanySchema” belgesini kaydetmeye çalışıyorum “karşılanmamış” gereksinim durumu için varsayılan değer ayarlanmıyor. Yani bana burada yanlış yaptığım şeyi açıklayabilir misiniz?mongoose alt belgesinde varsayılan enum değeri nasıl yapılandırılır?

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

Gereksinim özniteliğinde yalnızca bir alan var. Merak ediyorum neden başka bir alan 'durum' tanımladınız ve bunun için tanımlanmış enum. – notionquest

+0

Yakın gelecekte gereksinim özniteliğinde başka özellikler eklemek istiyorum. ama şimdilik sadece bir enum olan öznitelik statüsüne sahip. Bu özniteliğin varsayılan değeri "karşılanmamış" olmalı ve çalışma zamanında "karşılandı" olarak güncellenecektir. –

cevap

1

Sanırım şemanınızda iki sorun var.

İlk olarak, Mongoose ayrılmış anahtar kelimesini type kullanın.

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

Gelincik doc: typeKey

İkinci olarak, bir özellik adı olarak type anahtar kelime kullanılmış olmasaydı size bir hata vermesi gereken, null için bir varsayılan değer olarak ayarlayın. Exemple için requirement_type için type adlandırmak deneyin ve bu hatayı alırsınız: tutarlı

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

o kesin varsayılan değeri ayarlamak için bir tür ihtiyacı beri.

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

Gelincik doc: bunu varsayılan olarak null yapmak istiyorum neden SchemaType-default

Gerçekten anlamıyorum, ama exemple bir Mixed type için ekleyerek yapabilirsiniz:

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

Ya varsayılanı kaldırabilir ve aşağıdakileri alabilirsiniz:

Not: Enum değerlerini virgülle ayırmalısınız.

İlgili konular