首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >限制不工作在许多许多后遗症

限制不工作在许多许多后遗症
EN

Stack Overflow用户
提问于 2021-03-06 08:40:55
回答 1查看 615关注 0票数 1

极限不像我们想要的那样起作用。我们有一个项目模型,一个标记模型,以及这两者之间的很多很多关系,我们所想要的只是获得关于极限= 10的数据。

代码语言:javascript
代码运行次数:0
运行
复制
Project.findAndCountAll({
  include: {
    model: TagModel,
    as: 'tags',
    required: false,
  },
    distinct: true,
    subQuery: false,
    limit: 10
})

联接上返回的数据为74行,将限制结果应用于前10行,但这不是正确的数据。前10条记录中返回的proejcts仅仅是前5个项目,因为许多到多个项目加入,而其他项目由于限制10项而被丢弃。

我不希望将限制应用于联接之后的最终结果,这将导致此问题。我希望只有10的限制只适用于项目,然后加入应该与标签和所有的标签,这10个项目应该返回,无论他们是多少(标签也可以大于10 )。

我已经尝试在包含中设置以下限制

代码语言:javascript
代码运行次数:0
运行
复制
Project.findAndCountAll({
  include: {
    model: TagModel,
    as: 'tags',
    required: false,
    limit: 10,
    separate: true
  },
    distinct: true,
    subQuery: false,
})

但它带来了错误

“仅支持HasMany关联支持include.separate

这似乎意味着,包括在内,我们不能在许多关系中适用限制?

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 19:14:07

模型: A.js

代码语言:javascript
代码运行次数:0
运行
复制
"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

代码语言:javascript
代码运行次数:0
运行
复制
"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;
};
代码语言:javascript
代码运行次数:0
运行
复制
        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)))

输出

代码语言:javascript
代码运行次数:0
运行
复制
[
  {
    id: 1,
    orgId: 101,
    contentId: 'content1',
    A: [ [Object], [Object] ]
  },
  {
    id: 2,
    orgId: 101,
    contentId: 'content1',
    A: [ [Object], [Object] ]
  }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66503875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档