如何在环回中限制include-filter的关系记录?

del*_*ete 5 loopback strongloop loopbackjs

我想通过LoopBack -application中的REST-Api查询特定模型的记录.另外,我想通过include-filter包含相关对象.这很好,但返回所有相关的对象.是否可以限制它们,还可以通过相关对象的字段对它们进行排序?

楷模:

-   DEPARTMENT
    Fields:
        - id
        - name 
        - ...
    Relations_ -> hasMany: Messages
    Relations_ -> hasMany: Members

- MESSAGE
    Fields:
       - id
       - senderId
       - body
       - ...

- MEMBER
    Fields:
       - id
       - email
       - ...
Run Code Online (Sandbox Code Playgroud)

查询:

我想要实现的是查询所有部门及其所有成员,但只查询特定字段(created-timestamp)排序的最后一条消息.

第一种方法可能是GET-Request的普通查询字符串变体:

http://loopback-server:3000/api/departments?filter[include]=members&filter[include]=messages
Run Code Online (Sandbox Code Playgroud)

这将返回包含所有消息和所有成员的所有部门.但是,我想将返回消息的数量限制为最后一个(或最后5个或其他任何内容,按MESSAGE模型的特定字段排序).

我还尝试了jsonfied查询语法:

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","limit":1}}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这里不使用"限制"参数来表示消息的关系.

以下变量将仅返回第一个部门,表示limit-param应用于departments-model,而不是关系模型.

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages"},"limit":1}
Run Code Online (Sandbox Code Playgroud)

然后我发现了范围参数并尝试了这个:

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","scope":{"limit":1, "skip":0}}}
Run Code Online (Sandbox Code Playgroud)

这给出了一个非常奇怪的结果.这省略了与部门相关的所有消息,而不是一条返回一条消息的特定记录(它有超过10条),这是我所期望的.删除scope-parameter表明部门确实每个都有许多消息.

(我知道带有所有这些特殊字符的URL的参数,如{",:"}需要进行url编码.为了更好的可读性,我把它留在这里干净)

我的问题:

如何通过单个请求实现该查询?

Und*_*ium 3

目前还无法通过关系的属性来查询关系。至于限制,您最后的范围方法应该稍微修改一下:

"scope":{{"include":{"relation": "messages","limit":1, "skip":0}}}
Run Code Online (Sandbox Code Playgroud)

在这里您可以阅读有关按关系属性进行查询的信息:

https://github.com/strongloop/loopback/issues/517