如何查询具有不同属性的模型
Posted
技术标签:
【中文标题】如何查询具有不同属性的模型【英文标题】:How to query a model with different attributes 【发布时间】:2018-04-12 08:51:40 【问题描述】:我正在 Express 中构建一个应用程序,并为我的数据库使用 Postgres,为 ORM 使用 Sequelize。
在我的数据库中,每个 Post
都可以有以下 5 种类型之一:1
、2
、3
、4
、5
。
我想按类型显示所有帖子的数量。
router.route('/post).get(async (req, res) =>
const postOne = await Post.findAll(
where:
state: 1
);
const postTwo = await Post.findAll(
where:
state: 2
);
res.send( postOne: postOne.length, postTwo: postTwo.length );
我可以为所有 5 种类型编写这样的代码,但我想知道是否有更短的方法可以做到这一点,这样我就不必编写 5 次相同的代码。
谢谢!
【问题讨论】:
你使用哪个框架?你用什么数据库? 我正在使用 Node 和 Postgres 你确定你不使用 ExpressJs 或类似的东西吗?我相信 NodeJS does not have ORM 包括在内。大多数 ORM 都提供聚合功能,可帮助您在一次查询中获取所有计数。 谢谢@skyboyer 我澄清了我的问题 现在经过澄清,似乎下一个链接正是您所需要的:***.com/questions/22627258/… 【参考方案1】:const getPostWithType = (type) => Post.findAll(
where:
state: type
);
现在您可以改为await getPostWithType(1)
。甚至更好:
const postTypes = [1,2,3,4,5];
const allPosts = await Promise.all(postTypes.map(getPostWithType));
// allPosts is now an array with the results. You can map it again to get the lengths
const allPostLengths = allPosts.map(p => p.length);
【讨论】:
【参考方案2】:使用数组怎么样?如下图...
let promiseArray = [];
for (let i = 1; i <= 5; i++)
let promise = Post.findAll(
where:
state: i
);
promiseArray.push(promise);
Promise.all(promiseArray).then(function(response)
//Do whatever...
);
【讨论】:
以上是关于如何查询具有不同属性的模型的主要内容,如果未能解决你的问题,请参考以下文章