我想通过REST-Api从 LoopBack - 应用程序查询特定模型的记录。另外,我想通过include-filter包含相关对象。 这很好,但返回所有相关的对象。是否可以限制它们,还可以通过相关对象的字段对它们进行排序?
- DEPARTMENT
Fields:
- id
- name
- ...
Relations_ -> hasMany: Messages
Relations_ -> hasMany: Members
- MESSAGE
Fields:
- id
- senderId
- body
- ...
- MEMBER
Fields:
- id
- email
- ...
我想要实现的是查询所有部门及其所有成员,但只查询特定字段(created-timestamp)排序的最后一条消息。
第一种方法可能是GET-Request的普通查询字符串变体:
http://loopback-server:3000/api/departments?filter[include]=members&filter[include]=messages
这将返回包含所有消息和所有成员的所有部门。但是,我想将返回的消息数量限制为最后一个消息(或者最后5个或者其他消息,按MESSAGE模型的特定字段排序。
我还尝试了jsonfied查询语法:
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","limit":1}}
不幸的是,这里没有使用" limit" -parameter来表示消息的关系。
以下变体将仅返回第一个部门,表示limit-param应用于departments-model,而不是关系模型。
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages"},"limit":1}
然后我发现了范围 - 参数 并尝试了这个:
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","scope":{"limit":1, "skip":0}}}
这给出了一个非常奇怪的结果。这省略了与部门相关的所有消息,而不是一条返回一条消息的特定记录(它有超过10条),这是我所期望的。删除scope-parameter表明部门确实每个都有很多消息。
(我知道具有所有这些特殊字符的网址的参数,例如{&#34;,:&#34;}需要进行网址编码。为了更好的可读性,我将其保留在这里干净)< / em>的
如何使用单个请求实现该查询?
答案 0 :(得分:2)
无法通过其属性(尚)查询关系。至于限制,你应该稍微修改你对范围的最后一种方法:
"scope":{{"include":{"relation": "messages","limit":1, "skip":0}}}
在这里,您可以通过其属性阅读有关关系的查询:
答案 1 :(得分:1)
我不知道你在哪个版本,但对于Loopback 3
你可以这样做..
include: {
{
relation: 'Messages', // include the messages object
scope: { // this is where you do a normal filter
where: {<whatevercondition>},
order: "<fieldname> <ASC/DESC>",
limit:1,
include:{
//yes, you can include 3rd level relation as well.
}
}
},
{
relation: 'Members', // include the Members object
scope: { // further filter the related model
order: "<fieldname> <ASC/DESC>",
limit: <whateverlimityoument>
}
}
}
答案 2 :(得分:0)
尝试此代码:
`${urlApi}/user/?filter[limit]=${records_per_page}&filter[skip]=${(currentPage -1) *
records_per_page}`
答案 3 :(得分:0)
当您只有一个父记录时,包含范围的限制可以正常工作。 如果您想选择 N 个父记录并在每个记录中包含 1 个相关记录,请尝试我的解决方法:Limit for included records in Loopback4