私はMongoosejsを使用してMongoDBに接続しています。
スキーマの次の不自然な例を考えてみましょう。
var factSchema= new Schema({
facts: { type:[require('./fact')], select:false}
,roles: {type: [String], required: true, index: {unique: false}}
,c: {type: {}, default: {}} //all calculated stuff based on facts
}
これは、通常「factSchema」をクエリする場合、実際の「ファクト」はクエリされないことを明示的に示しています。'facts'の選択を明示的に実行した後でのみ、それらが含まれていることを確認できます。すなわち:
//factModel is a model derived from factSchema
factModel.findOne({_id:input.id})
.select(["facts","roles","c"]).exec(function(err,result){//do something});
これは、この些細なケースで機能します。ただし、factSchemaをサブクラス化しており(方法に関する情報:https ://groups.google.com/forum/?fromgroups#!searchin / mongoose-orm / INHERIT / mongoose-orm / aeqGRRnpFvg / lbfIA54hiwYJ )、すべてのフィールドをクエリしたい特定のサブクラスの、しかしそれは私がクエリしているサブクラスを実行時にのみ知っています。つまり、返されるフィールドを明示的に指定することはできません。
どうすればいいですか?
考えられる解決策は、(?)であるように思われます。subclassedSchema.paths
ここsubclassedSchema
で、のサブクラスを実行することにより、スキーマのすべての定義済みフィールドにアクセスできますfactSchema
。
これは機能しますが、将来のリリースで安定していると信じることができますか?これに取り組むためのより良い、よりハックの少ない方法はありますか?