我对猫鼬模型有疑问
首先,我的英语不好,所以对语法错误(如果存在)感到抱歉
我创建了一个有关文件系统的架构,它拥有自己的子级引用,因此可以是无限级别的嵌套列表
看起来像这样
const Upload = new Schema({
name: String,
ext: String,
dir: Boolean,
description: String,
share: [{type: Schema.Types.ObjectId, ref: 'Account'}],
children: [{type: Schema.Types.ObjectId, ref: 'Upload'}],
postedBy: {type: Schema.Types.ObjectId, ref: 'Account'},
parentId: String,
createdAt: {
type: Date,
default: Date.now
},
updatedAt: {
type: Date,
default: Date.now
}
});
然后我要再次填充儿童和儿童
所以我用了一个叫做'pre'的钩子
看起来像这样
Upload.pre('find',async function(){
this.populate('postedBy','profile')
.populate('children','name ext dir description children createdAt');
});
工作正常
但仅适用于一个深度,而不再适用。
另一个问题是我需要格式化日期的列名称为'createdAt'
我知道可以通过“虚拟”创建自定义列
但似乎无法使用select
所以我在地图上使用了自定义功能
像这样
// list query
Upload.statics.list = async function(userId){
const uploadList =
await this
.find({
$and: [
{postedBy: userId},
{parentId: undefined},
]
})
.select('name ext dir description children createdAt')
.sort({name: 1})
.lean();
return uploadList.map(formatDate);
};
//my custom function
exports.formatDate = obj => {
const createdAt = _.cloneDeep(obj.createdAt);
const formatDate = `${createdAt.getFullYear()}/${createdAt.getMonth()+1}/${createdAt.getDate()}`;
return {...obj, formatDate};
};
我的根文档工作正常
但是人口稠密的孩子呢?
我不知道该如何处理
Upload.pre('find',async function(){
this.populate('postedBy','profile')
.populate('children','name ext dir description children createdAt');
/* how to add custom column in this??? with my custom function */
});
所以我的问题是
感谢您的阅读,并感谢您的提前帮助