Сервер синтаксического анализа - получение связанных классов - rest api - PullRequest
0 голосов
/ 25 мая 2020

Предполагается, что у меня есть класс User и класс Profile

Класс профиля имеет поле с именем «sex» и поле с именем «user», которое является указателем на класс пользователя.

Если я получаю конечную точку профиля с помощью: https://myapi.back4app.io/classes/Profile, я могу получить объект профиля:

{
    "results": [
        {
            "objectId": "sIE6lOZP7R",
            "user": {
                "__type": "Pointer",
                "className": "_User",
                "objectId": "asP3EFYSR4"
            },
            "sex": "male",
            "createdAt": "2020-05-25T17:15:49.324Z",
            "updatedAt": "2020-05-25T17:15:49.324Z"
        }
    ]
}

, и если я хочу включить пользователя этого профиля, я могу включить его с помощью: https://myapi.back4app.io/classes/Perfil?include=user, чтобы я получил:

{
    "results": [
        {
            "objectId": "sIE6lOZP7R",
            "user": {
                "objectId": "asP3EFYSR4",
                "username": "fabiojansen",
                "createdAt": "2020-05-25T17:15:16.273Z",
                "updatedAt": "2020-05-25T17:15:16.273Z",
                "ACL": {
                    "*": {
                        "read": true
                    },
                    "asP3EFYSR4": {
                        "read": true,
                        "write": true
                    }
                },
                "__type": "Object",
                "className": "_User"
            },
            "sex": "male",
            "createdAt": "2020-05-25T17:15:49.324Z",
            "updatedAt": "2020-05-25T17:15:49.324Z"
        }
    ]
}

Это нормально, но если я хочу получить всех пользователей с информацией профиля в одном запросе? Это возможно? В моем классе User у меня нет указателя на класс профиля, только в классе профиля.

Есть ли способ?

Спасибо

1 Ответ

0 голосов
/ 26 мая 2020

У вас есть несколько вариантов:

1) Вы можете использовать конвейер aggregate и $lookup пользователя в классе Perfil, который выполняет LEFT JOIN. Однако это не вернет массив Parse.Object, вам придется анализировать результаты вручную. Из docs :

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

2) Вы можете выполнить 2 запроса, сначала получив всех пользователей, а затем получив все их профили по идентификаторам пользователей.

3) Вы можете изменить свою модель данных и добавить указатель на Perfil в свой User класс. Если вы выполняете этот запрос в масштабе, это может быть полезно.

...