gpt4 book ai didi

mysql - 如何返回 Sequelize 中树 Node 的子 Node 数?

转载 作者:行者123 更新时间:2023-11-29 00:11:32 24 4
gpt4 key购买 nike

我有一个这样定义的分层树数据结构:

module.exports = function(sequelize, DataTypes) {
var Category = sequelize.define('Category', {
id: { type: DataTypes.STRING, primaryKey: true },
parent: DataTypes.STRING,
text: DataTypes.STRING
}
);
Category.belongsTo(Category, { foreignKey: 'parent' });
return Category;
};

我有一个服务返回给定 Node 的子列表,如下所示:

exports.categoryChildren = function(req, res) {
var id = req.params.id;
db.Category.findAll({ where: { parent: id }}).success(function(categories){
return res.jsonp(categories);
}).error(function(err){
return res.render('error', { error: err, status: 500 });
});
};

有没有办法让 Sequelize 返回给定 Node 的每个子 Node (即给定 Node 的孙 Node )的孙 Node 数量?

我为此使用的 SQL 查询如下所示:

SELECT *, (select count(*) from Categories chld where chld.parent = cat.id) 
FROM `Categories` cat
WHERE cat.`parent`='my_node_id';

但是,我找不到强制 Sequelize 生成这样的查询的方法。

最佳答案

我最终使用了两个嵌套查询,如下所示。

优点:我坚持使用 ORM 范例。

缺点:明显的性能下降。

exports.categoryChildren = function(req, res) {
var id = req.params.id;

db.Category.findAll({ where: { parent: id }}).success(function(categories) {
var categoryIds = [];
_.each(categories, function(element, index, list) {
categoryIds[element.id] = element;
});
db.Category.findAll({attributes: [['Categories.parent', 'parent'], [Sequelize.fn('count', 'Categories.id'), 'cnt']], where: { parent: { in: _.keys(categoryIds) }}, group: ['Categories.parent']}).success(function(counts) {
_.each(counts, function(element, index, list) {
categoryIds[element.dataValues.parent].dataValues.cnt = element.dataValues.cnt;
});
return res.jsonp(categories);
}).error(function(err){
return res.render('error', {
error: err,
status: 500
});
});
}).error(function(err){
return res.render('error', {
error: err,
status: 500
});
});
};

关于mysql - 如何返回 Sequelize 中树 Node 的子 Node 数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com