populate主要应用于数据库检索时跨collection的检索信息。但是在实际工程应用中,为了提升性能,我们不需要跨collection收集信息。在strapi应用中可以采用这样的方法做到。
第一,在相关模型的setting里面的相关relation里配置autoPopulation为false。例如:
in file: /api/category/models/category.settings.json
{
"connection": "default",
"collectionName": "categories",
"info": {
"name": "category"
},
...
"attributes": {
"name": {
"type": "string",
"default": "unnamed",
"unique": true,
"required": true,
"minLength": 1,
"maxLength": 128
},
...
"models": {
"via": "categories",
"collection": "model",
"autoPopulate": false
}
} }
在此示例中,即关闭了检索category时对models的自动populate操作,除非显示的给query函数指定populate = ['models']
第二,如果在配置了autoPopulate为false之后,你需要对该relation做populate操作,那么比较好的实践方法是重写该模型的controller,然后在controller中对service调用的时候,把populate作为参数传递给query函数。例如:
await strapi.services.category.find(parm, ['models'])
以上代码则显式的把['models']参数作为populate参数传递给了service里面的query函数