我正在使用Mongoose.js来创建带有模式的模型.
我有一个模型列表(很多),有时我想获得构成特定模型的属性/键.
是否有方法为任何给定的模型提取属性模式?
例如,
var mySchema = module.exports = new Schema({
SID: {
type: Schema.Types.ObjectId
//, required: true
},
teams: {
type: [String]
},
hats: [{
val: String,
dt: Date
}],
shields: [{
val: String,
dt: Date
}],
shoes: [{
val: String,
dt: Date
}]
}
Run Code Online (Sandbox Code Playgroud)
);
是否可以提取/识别模式的属性[SID, hats, teams, shields, shoes]?
gus*_*nke 70
对的,这是可能的.
每个模式都有一个paths属性,看起来有点像这样(这是我的代码的一个例子):
paths: {
number: [Object],
'name.first': [Object],
'name.last': [Object],
ssn: [Object],
birthday: [Object],
'job.company': [Object],
'job.position': [Object],
'address.city': [Object],
'address.state': [Object],
'address.country': [Object],
'address.street': [Object],
'address.number': [Object],
'address.zip': [Object],
email: [Object],
phones: [Object],
tags: [Object],
createdBy: [Object],
createdAt: [Object],
updatedBy: [Object],
updatedAt: [Object],
meta: [Object],
_id: [Object],
__v: [Object]
}
Run Code Online (Sandbox Code Playgroud)
您也可以通过模型访问它.它在Model.schema.paths.
js_*_*alf 40
没有足够的rep来评论,但这也会吐出一个列表并循环遍历所有模式类型.
mySchema.schema.eachPath(function(path) {
console.log(path);
});
Run Code Online (Sandbox Code Playgroud)
应该打印出来:
number
name.first
name.last
ssn
birthday
job.company
job.position
address.city
address.state
address.country
address.street
address.number
address.zip
email
phones
tags
createdBy
createdAt
updatedBy
updatedAt
meta
_id
__v
Run Code Online (Sandbox Code Playgroud)
或者您可以将所有属性作为数组获取,如下所示:
var props = Object.keys(mySchema.schema.paths);
Run Code Online (Sandbox Code Playgroud)
lodash的解决方案,选择所有架构属性的函数,不包括指定的
_.mixin({ pickSchema: function (model, excluded) {
var fields = [];
model.schema.eachPath(function (path) {
_.isArray(excluded) ? excluded.indexOf(path) < 0 ? fields.push(path) : false : path === excluded ? false : fields.push(path);
});
return fields;
}
});
_.pickSchema(User, '_id'); // will return all fields except _id
_.pick(req.body, _.pickSchema(User, ['_id', 'createdAt', 'hidden'])) // all except specified properties
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多内容https://gist.github.com/styopdev/95f3fed98ce3ebaedf5c
小智 9
我的解决方案使用猫鼬模型。
架构属性
const schema = {
email: {
type: String,
required: 'email is required',
},
password: {
type: String,
required: 'password is required',
},
};
Run Code Online (Sandbox Code Playgroud)
架构
const FooSchema = new Schema(schema);
Run Code Online (Sandbox Code Playgroud)
模型
const FooModel = model('Foo', FooSchema);
Run Code Online (Sandbox Code Playgroud)
从模型中获取属性:
Object.keys(FooModel.schema.tree)
Run Code Online (Sandbox Code Playgroud)
结果:
[
'email',
'password',
'_id',
'__v'
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37461 次 |
| 最近记录: |