Loopback 4查询中属性的长度限制数组类型?

问题描述

我一直在尝试这个新框架Loopback 4及其出色的功能,但我不知道哪一点很灵活,我在数据库上有以下模型:

{
"id": "string","lastUpdate": "2020-10-01T18:10:46.306Z","name": "string","logo": "string","data": [
  {}
]

}

我想做的是使查询返回我的数据,但是作为数组,它有很多数据,因此我想对它进行分页,因此我考虑限制查询。我已经实现了如下查询

{
  "offset": 0,"limit": 10,"skip": 0,"where": {
    "name": {"eq":"BengalaSpain"}
  },"fields": {
    "data": true
  }
}

我试图将data属性限制为10,但是当然,此操作会影响属性本身,仅影响周围的包装对象。有什么办法可以实现我的目的?

谢谢大家!

解决方法

LoopBack 4过滤器在存储库级别应用,因为这些约束传递到ORM数据源连接器以转换为它们各自的本机查询(例如,对于SQL Server为TOP 10)。

可能的解决方案是将data字段链接到Relation。关系实质上是创建嵌套的存储库(例如hasManyRepository),因此能够满足将data隔离到其自己的存储库中的要求。

要快速创建关系,请从“模型”中删除该属性,然后使用lb4 relation命令重新创建它。

从那里,可以利用现已启用的InclusionResolver并编写使用查询:

{
  "where": {
    "name": {"eq":"BengalaSpain"}
  },"fields": {
    "data": true
  },"include": [
    {
      "relation": "<relation name here>","scope": {
        "limit": 10
      }
    }
  ]
}

副作用是data分离到其自己的表中。但是,由于database normalization,无论如何都应这样做。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...