如何创建未附加到模型的查询
How to create a query not attached to a model
Strapi 使用 bookshelf(或 Mongoose)来管理它管理的实体的模型。这相当方便,在查询这些模型中的数据时很有用。
当我尝试执行聚合查询时,我的问题就来了。想象一下,如果您有一个包含两个字段的 Todo
模型:name
和 done
,您可以通过执行(在 services/Todo.js
):
Todo.query().fetchAll()
但我想要的是计算已完成和未完成的待办事项数量。本质上,我想执行:
SELECT done, count(*) as howMany FROM todo GROUP BY done
我可以创建查询,它会执行它...但它失败了,因为它试图使用查询的结果来组合 Todo 对象,但它抱怨没有 name
。
所以,问题是:strapi 是否提供了 "general purpose" 查询功能,我可以使用它来 运行 模型分离查询?
我希望能够使用与 strapi 相同的数据库连接。
这不直观,文档对此也不清楚。
但是您可以在 strapi.connections.default
.
中访问 mongoose 和 knex 实例
希望对您有所帮助。
使用示例如下:
const knexQueryBuilder = strapi.connections.default('mytable');
knexQueryBuilder.where('myfield','=','myvalue');
const resp = await knexQueryBuilder.then();
console.log('Results: ', resp);
Strapi 使用 bookshelf(或 Mongoose)来管理它管理的实体的模型。这相当方便,在查询这些模型中的数据时很有用。
当我尝试执行聚合查询时,我的问题就来了。想象一下,如果您有一个包含两个字段的 Todo
模型:name
和 done
,您可以通过执行(在 services/Todo.js
):
Todo.query().fetchAll()
但我想要的是计算已完成和未完成的待办事项数量。本质上,我想执行:
SELECT done, count(*) as howMany FROM todo GROUP BY done
我可以创建查询,它会执行它...但它失败了,因为它试图使用查询的结果来组合 Todo 对象,但它抱怨没有 name
。
所以,问题是:strapi 是否提供了 "general purpose" 查询功能,我可以使用它来 运行 模型分离查询?
我希望能够使用与 strapi 相同的数据库连接。
这不直观,文档对此也不清楚。
但是您可以在 strapi.connections.default
.
希望对您有所帮助。
使用示例如下:
const knexQueryBuilder = strapi.connections.default('mytable');
knexQueryBuilder.where('myfield','=','myvalue');
const resp = await knexQueryBuilder.then();
console.log('Results: ', resp);