LoopBack -applicationからREST-Apiを介して特定のモデルのレコードを照会したいとします。また、私はインクルードフィルターを介して関連するオブジェクトを含めるしたい。 これは正常に動作しますが、すべての関連オブジェクトを返します。それらを制限することは可能ですか?また関連オブジェクトのフィールドでそれらを注文することは可能ですか?ループバックでインクルードフィルターとの関係のレコードを制限する方法はありますか?
モデル:
- DEPARTMENT
Fields:
- id
- name
- ...
Relations_ -> hasMany: Messages
Relations_ -> hasMany: Members
- MESSAGE
Fields:
- id
- senderId
- body
- ...
- MEMBER
Fields:
- id
- email
- ...
クエリ:
私が達成したいどのようなすべてのメンバーとすべての部門を照会することですが、特定のフィールド(作成されたタイムスタンプ)が注文した最後のメッセージ。
最初のアプローチは、GETリクエストのプレーンなクエリ文字列バリアントのようになります。
http://loopback-server:3000/api/departments?filter[include]=members&filter[include]=messages
これは、すべてのメッセージと、すべてのメンバーとすべての部門を返します。 。しかし、私はMESSAGE-モデルの特定のフィールドでソートされた最後の1(または最後の5または何に返されるメッセージの数を制限したい
を私はまたjsonfiedクエリ構文を試してみました:
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","limit":1}}
残念ながら、メッセージの関係に "limit"パラメータは使用されていません。
次の亜種は最初の部門のみを返します。つまり、リレーションモデルではなく、departments-modelに適用されます。
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages"},"limit":1}
それから私は -parameter 範囲を発見し、これを試してみました:
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","scope":{"limit":1, "skip":0}}}
これは本当に奇妙な結果を与えます。これは、1つのメッセージを返す1つの特定のレコード(10を超える)を返すのではなく、部門に関連するすべてのメッセージを排除します。 scope-parameterを削除すると、各部門に実際に多数のメッセージがあることがわかります。
(私は{「」}のように、これらすべての特殊文字をURLのパラメータがあることを知っています。URLエンコードする必要があり、私は読みやすくするため、ここできれいに残す)
私の質問:
1回のリクエストでどのようにクエリを実行するのですか?
https://loopback.io/doc/en/lb3/Include-filter.html#include-with-filtersをご覧ください –