极限不像我们想要的那样起作用。我们有一个项目模型,一个标记模型,以及这两者之间的很多很多关系,我们所想要的只是获得关于极限= 10的数据。
Project.findAndCountAll({
include: {
model: TagModel,
as: 'tags',
required: false,
},
distinct: true,
subQuery: false,
limit: 10
})
联接上返回的数据为74行,将限制结果应用于前10行,但这不是正确的数据。前10条记录中返回的proejcts仅仅是前5个项目,因为许多到多个项目加入,而其他项目由于限制10项而被丢弃。
我不希望将限制应用于联接之后的最终结果,这将导致此问题。我希望只有10的限制只适用于项目,然后加入应该与标签和所有的标签,这10个项目应该返回,无论他们是多少(标签也可以大于10 )。
我已经尝试在包含中设置以下限制
Project.findAndCountAll({
include: {
model: TagModel,
as: 'tags',
required: false,
limit: 10,
separate: true
},
distinct: true,
subQuery: false,
})
但它带来了错误
“仅支持HasMany关联支持include.separate
这似乎意味着,包括在内,我们不能在许多关系中适用限制?
发布于 2021-03-06 19:14:07
模型: A.js
"use strict";
const {
Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class A extends Model {
static associate(models) {
// define association here
this.belongsTo(models.B, {
foreignKey: "bId",
as: "B",
});
this.belongsTo(models.C, {
foreignKey: "cId",
as: "C",
});
}
}
A.init({
bId: DataTypes.INTEGER,
cId: DataTypes.INTEGER,
}, {
sequelize,
modelName: "A",
timestamps: false,
tableName: 'A'
});
return A;
};
模型: B.js
"use strict";
const {
Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class B extends Model {
static associate(models) {
// define association here
this.hasMany(models.A, { // This is must: hasMany
foreignKey: "bId",
as: "A",
});
}
}
B.init({
orgId: DataTypes.INTEGER,
contentId: DataTypes.STRING,
}, {
sequelize,
modelName: "B",
timestamps: false,
tableName: 'B'
});
return B;
};
var B = await db.B.findAll({
limit: 2,
include: [{
model: db.A,
as: 'A',
required: false,
limit: 2,
}
]
})
console.log(JSON.parse(JSON.stringify(B)))
输出
[
{
id: 1,
orgId: 101,
contentId: 'content1',
A: [ [Object], [Object] ]
},
{
id: 2,
orgId: 101,
contentId: 'content1',
A: [ [Object], [Object] ]
}
]
https://stackoverflow.com/questions/66503875
复制相似问题