Как вернуть идентификатор с Mon goose Совокупный поиск с Apollo GraphQL - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть агрегатная функция, которая возвращает людей в коллекции:

const getById = ({ id }) => {
    return Project.aggregate([
      { $match: { _id: Types.ObjectId(id) } },
      {
        $lookup: {
          from: "members",
          localField: "_id",
          foreignField: "project_id",
          as: "members"
        }
      },
    ])
      .then(data => {
        const [project] = data;
        console.log(project) // see below
        return {
          id: project._id,
          ...project
        };
      })
      .catch(err => console.log(err));
  }

Если я возвращаю данные из этого, я получаю следующее:

// Server response
{ _id: 5e2f57b577a8ce59c79e74af,
  title: 'ok',
  user_id: 5e2dc7961e6b840c315b5a03,
  __v: 0,
  members:
   [ { _id: 5e447683b4f732cc9c4a9531,
       name: 'Karl Taylor',
       email: 'karl@queuey.dev',
       project_id: 5e2f57b577a8ce59c79e74af,
       position: 1,
       __v: 0 },
     { _id: 5e45be128ed96a5eaef5d13e,
       name: 'John Smith',
       email: 'john@queuey.dev',
       project_id: 5e2f57b577a8ce59c79e74af,
       position: 2,
       __v: 0 } ] }

Однако, когда я запрашиваю из внешнего интерфейса, использующего Apollo GraphQL, идентификатор равен нулю. (Но он работает с другими элементами, так как id является геттером для id, но этого не происходит с агрегатными функциями).

Как лучше всего сопоставить id с правильным значением ? Я обычно просто использовал бы array.map, но я чувствую, что это может быть излишним, если у меня слишком много участников (в этот момент я, вероятно, разберусь с этим, чтобы сделать нумерацию страниц, но это другая история). Это ответ от внешнего интерфейса

// Client response
"project": {
      "id": "5e2f57b577a8ce59c79e74af",
      "title": "ok",
      "members": [
        {
          "id": null, // <-- Notice here is null
          "name": "Karl Taylor",
          "email": "karl@queuey.dev",
          "__typename": "Member"
        },
        {
          "id": null, // <-- Notice here is null
          "name": "John Smith",
          "email": "john@queuey.dev",
          "__typename": "Member"
        }
      ],
      "__typename": "Project"
    }

Этот вопрос здесь похож, но я не считаю, что это дубликат, потому что мы запрашиваем разные данные. (ответ не решает мой вопрос.)

Мне нужно иметь возможность вернуть id, в противном случае кэшированные перенаправления не будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...